Assert.AreEquals调用object.Equals而不考虑IEquatable的实现

6
今天在编写和运行一些测试时,我发现即使我的类实现了IEquatable<MyClass>接口,Assert.AreEqual(instanceOfMyClass, anotherInstance);的结果也是false。
事实证明,无论如何,Assert.AreEquals调用的都是object.Equals(object obj)而不是正确的MyClass.Equals(MyClass obj)函数。
在假设有一个逻辑原因的情况下,这是什么原因?

1个回答

2
您可以尝试在相关类上重载“==”并使用通用的“Assert.AreEqual<T>”重载,该重载使用等号运算符。
个人而言,我更喜欢使用Assert.AreEqual(true,InstanceA.Equals(InstanceB)),因为这肯定会使用您的Equals方法;当然,这假设您已经对Equals方法进行了单元测试,并且确定它百分之百有效 :)
至于为什么Assert使用object.Equals,我想我们必须问类的设计者 :) 但我想一个原因是,如果您的Equals方法有缺陷,则测试结果无效。

我最终通过检查输入类型并将其转发到object.Equals中的相关函数来解决了这个问题。我更多的是在问为什么,而不是寻找一个解决方案。 - Sellorio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接