Content
から継承するというオブジェクトがありますContentBase
。
ContentBase
いくつかのプロパティを持つ基本的なクラスです。
Content
完全に空です。からすべてを継承するだけContentBase
です。
public class ContentBase
{
public virtual int Id { get; set; }
public virtual string Application { get; set; }
public virtual string Property1 { get; set; }
public virtual string Property2 { get; set; }
}
public class Content : ContentBase
{
}
Moqを使用して、このテストがあります:
[Test]
public void AreEqual_Test()
{
var c1 = new Content() { CultureCode = "Code", ResourceKey = "key", ResourceType = "type", ResourceValue = "value" };
var c2 = new Content() { CultureCode = "Code", ResourceKey = "key", ResourceType = "type", ResourceValue = "value" };
Assert.AreEqual(c1, c2);
}
次のメッセージで失敗します。
Expected: <WebPortal.DomainModels.PresentationModel.Content>
But was: <WebPortal.DomainModels.PresentationModel.Content>
at
NUnit.Framework.Assert.That(Object actual, IResolveConstraint expression, String message, Object[] args)
at WebPortal.DomainModels.Tests.PresentationModel.ContentTests.AreEqual_Test() in ContentTests.cs: line 16
これは、Content が ContentBase から継承されていない場合には発生しませんでしたが、それでも、エラー メッセージがばかげていることがわかりました。
Content クラスには、次の Equals が含まれています。
public override bool Equals(object obj)
{
var content = (Content)obj;
return this.ResourceKey == content.ResourceKey && this.ResourceType == content.ResourceType && this.CultureCode == content.CultureCode;
}
public override int GetHashCode()
{
return this.Id.GetHashCode() + this.Application.GetHashCode();
}
失敗した Assert は Equals メソッドをトリガーしません
Assert.AreEqual(c1, c2);
ただし、以下の Assert は Equals をトリガーし、テストはパスします。
Assert.IsTrue(c1.Equals(c2));
誰もこれを見たことがありますか?