AreEqual将对象与ToString进行比较

时间:2013-12-19 16:04:16

标签: nunit assertions

我正在使用Assert.AreEqual来比较两个对象。对象是同一个类的两个不同实例,并且该类中有一个ToString方法。当我调用AreEqual时,我可以从调试器中看到调用ToString方法(对于两个变量中的每一个都调用一次)。

ToString方法在每种情况下都返回完全相同的字符串,但仍然由于某种原因,AreEqual方法返回false。

为什么会这样?

错误是

Additional information:   Expected: <DeliveryTag: 0, RoutingKey: , Body: test, Headers: test: test, ContentType: text/plain>

  But was:  <DeliveryTag: 0, RoutingKey: , Body: test, Headers: test: test, ContentType: text/plain>

1 个答案:

答案 0 :(得分:3)

只需调用

ToString来报告预期值和实际值。它决定平等的因素。这是Equals(object)方法,您应该重写该方法以提供您感兴趣的相等语义。(您应该考虑实施IEquatable<T>,但是&#39} ; s稍微分开。)

简而言之,Assert.AreEqual已实现 之类的内容:

// Somewhat simplified, but right general idea
if (!expected.Equals(actual))
{
    // Note how once we've got here, it's too late... the results
    // of ToString are irrelevant to whether or not we throw an exception
    string expectedText = expected.ToString();
    string actualText = actual.ToString();
    string message = string.Format("Expected: {0}  But was: {1}",
        expectedText, actualText);
    throw new AssertionFailureException(message);
}