Nunit AreEqual将对象与ToString进行比较

Nunit AreEqual将对象与ToString进行比较,nunit,assertions,Nunit,Assertions,我正在使用Assert.AreEqual来比较两个对象。对象是同一类的两个不同实例,该类中有一个ToString方法。当我调用AreEqual时,我可以从调试器中看到ToString方法被调用(两个变量各调用一次) ToString方法在每种情况下返回完全相同的字符串,但由于某些原因,AreEqual方法仍然返回false 为什么会这样 错误是 Additional information: Expected: <DeliveryTag: 0, RoutingKey: , Body:

我正在使用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>
其他信息:预期:
但是:

只需调用ToString
即可报告预期值和实际值。这不是决定平等的因素。这就是
Equals(object)
方法,为了提供您感兴趣的相等语义,您应该覆盖该方法。(您应该考虑执行<代码> IEQuabtI:/COD>),但这是稍微分开的。)< /P> 简而言之,
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);
}