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