我正在使用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>
答案 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);
}