5

今天在编写和运行一些测试时,我发现即使我的类实现了一个IEquatable<MyClass>接口,Assert.AreEqual(instanceOfMyClass, anotherInstance);结果还是错误。

事实证明,无论如何,Assert.AreEquals调用object.Equals(object obj)而不是正确的MyClass.Equals(MyClass obj)函数。

在有逻辑原因的假设下,它是什么?

4

1 回答 1

1

您可以尝试在有问题的类上重载 == 并使用使用 equals 运算符的通用“Assert.AreEqual< T>”重载。

我个人更喜欢使用Assert.AreEqual(true,InstanceA.Equals(InstanceB)),因为这肯定会使用您的 Equals 方法;当然,这假设您已经对 Equals 方法进行了单元测试,并且 100% 确定它可以工作:)

至于为什么 Assert 使用 object.Equals,我想我们得问问类的设计者 :) 但我想一个原因是,如果你的 Equals 方法有问题,那么你的测试结果就不好。

于 2013-09-05T00:01:03.793 回答