我在阅读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