我在閱讀Test Driven Development: By Example。所有示例都使用Java和Junit(我在第10章中)。有一種測試方法可以測試兩個對象的相等性。我已經覆蓋了這個類的Equals,但是運行我的測試失敗了。如何在xunit.net中測試兩個對象是否相等?
這是示例代碼
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
。如果我想用override方法比較兩個對象,我應該使用什麼方法?
更新
我測試這對Windows 7的,的Visual Studio 11 Beta版,xunit.net 1.9.0.1566使用T-的equals(得到的NuGet文件)
'測試'是受保護的,那麼如何在測試中說'var b1.Text =「a」;'?無論如何,如果你讓'Test'公開,然後運行你在這個問題中提供的代碼,它會在我嘗試時通過。 – Matt 2012-04-28 18:22:47
我剛剛更新了我的代碼,並且還添加了關於我的機器的信息。 :) – Anonymous 2012-04-29 08:41:40