【发布时间】:2012-04-29 23:49:19
【问题描述】:
我正在阅读Test Driven Development: By Example。所有示例都使用 Java 和 Junit(我在第 10 章)。有一种测试方法可以测试两个对象是否相等。我已经覆盖了该类的 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。如果我想用 override 方法比较两个对象,我应该使用什么方法?
更新
我在 Windows 7、Visual Studio 11 Beta、xunit.net 1.9.0.1566(从 nuget 获取文件)
【问题讨论】:
-
Test是受保护的,那么你怎么能在测试中说出var b1.Text = "a";呢?在任何情况下,如果您将Test设为公开,然后运行您在此问题中提供的代码,我尝试时它就会通过。 -
我刚刚更新了我的代码并添加了关于我的机器的信息。 :)