私はテスト駆動開発を読んでいます:例によって。すべての例でJavaとJunitを使用しています(私は第10章にいます)。2つのオブジェクトの同等性をテストする1つのテスト方法があります。私はすでにクラスのEqualsをオーバーライドしていますが、テストを実行すると失敗しました。
これはサンプルコードです
public class BaseX
{
public string Test { get; set; }
public override bool Equals(object obj)
{
return this.Test == ((BaseX)obj).Test;
}
public override string ToString()
{
return string.Format("Tyep: {0}, Test: {1}", this.GetType().Name, this.Test);
}
}
public class A : BaseX
{
}
これは私のテストコードです
[Fact]
public void FunTest2()
{
var b1 = new BaseX();
var a1 = new A();
b1.Test = "a";
a1.Test = "a";
Assert.Equal(a1, b1);
}
テストを実行すると、このメッセージで失敗します。
TDD1.UnitTest.UnitTest1.FunTest2 : Assert.Equal() Failure
Expected: Tyep: A, Test: a
Actual: Tyep: BaseX, Test: a
Assert.Equal
オブジェクトの値とタイプの両方を比較すると思います。そこで、xunitコードを調べて、そのAssert.Equal
呼び出しを見つけましたIEqualityComparer.Equals
。2つのオブジェクトをオーバーライドメソッドと比較したい場合、どのメソッドを使用する必要がありますか?
アップデート
私はこれをWindows7、Visual Studio 11 Beta、xunit.net 1.9.0.1566(nugetからファイルを取得)でテストします