【问题标题】:Assert.AreEquals calls object.Equals irrespective of IEquatable implemenationsAssert.AreEquals 调用 object.Equals 与 IEquatable 实现无关
【发布时间】:2013-09-04 23:49:22
【问题描述】:

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

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

假设有一个逻辑上的原因,它是什么?

【问题讨论】:

标签: c# visual-studio unit-testing


【解决方案1】:

您可以尝试在相关类上重载 == 并使用使用等于运算符的通用“Assert.AreEqual”重载。

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

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

【讨论】:

  • 我刚刚通过检查输入类型转发到 object.Equals 中的相关函数。我更多的是问为什么,而不是寻找解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-13
  • 1970-01-01
  • 1970-01-01
  • 2014-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多