今天在编写和运行一些测试时,我发现即使我的类实现了一个IEquatable<MyClass>
接口,Assert.AreEqual(instanceOfMyClass, anotherInstance);
结果还是错误。
事实证明,无论如何,Assert.AreEquals
调用object.Equals(object obj)
而不是正确的MyClass.Equals(MyClass obj)
函数。
在有逻辑原因的假设下,它是什么?
今天在编写和运行一些测试时,我发现即使我的类实现了一个IEquatable<MyClass>
接口,Assert.AreEqual(instanceOfMyClass, anotherInstance);
结果还是错误。
事实证明,无论如何,Assert.AreEquals
调用object.Equals(object obj)
而不是正确的MyClass.Equals(MyClass obj)
函数。
在有逻辑原因的假设下,它是什么?
您可以尝试在有问题的类上重载 == 并使用使用 equals 运算符的通用“Assert.AreEqual< T>”重载。
我个人更喜欢使用Assert.AreEqual(true,InstanceA.Equals(InstanceB))
,因为这肯定会使用您的 Equals 方法;当然,这假设您已经对 Equals 方法进行了单元测试,并且 100% 确定它可以工作:)
至于为什么 Assert 使用 object.Equals,我想我们得问问类的设计者 :) 但我想一个原因是,如果你的 Equals 方法有问题,那么你的测试结果就不好。