Assert.AreEquals调用对象.等于,而不考虑IEquatable实现

本文关键字:不考虑 IEquatable 实现 等于 AreEquals 调用 对象 Assert | 更新日期: 2023-09-27 18:30:09

今天在编写和运行一些测试时,我发现即使我的类实现了IEquatable<MyClass>接口,Assert.AreEqual(instanceOfMyClass, anotherInstance);也会导致false。

事实证明,不管怎样,Assert.AreEquals都会调用object.Equals(object obj),而不是正确的MyClass.Equals(MyClass obj)函数。

在假设存在逻辑原因的情况下,它是什么?

Assert.AreEquals调用对象.等于,而不考虑IEquatable实现

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

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

至于Assert为什么使用对象。Equals,我想我们必须询问类的设计者:)但我想其中一个原因是,如果Equals方法有缺陷,那么测试结果就不好。