我正在编写一些单元测试,但以下断言失败:
Assert.AreEqual(expected.Episode, actual.Episode);
如果我改为调用它,它会成功:
Assert.IsTrue(expected.Episode.Equals(actual.Episode));
在这种情况下,我假设Assert.AreEqual()
最终会调用Equals()
给定类型的方法Episode.Equals()
。
但是,在Microsoft.VisualStudio.TestTools.UnitTesting.Assert的幕后,我发现了以下代码(由 ReSharper 反编译):
public static void AreEqual<T>(T expected, T actual, string message, params object[] parameters)
{
if (object.Equals((object)expected, (object)actual))
return;
Assert.HandleFail...
}
这对我来说意味着该AreEqual()
方法正在强制使用基本方法expected
而不是我在类中编写的重载。基本方法将简单地检查引用是否相同,而它们不是。actual
object
Equals()
Episode
我有两个问题:
- 我的解释实际上是正确的,还是我错过了什么?
- 为什么框架要强制使用 object.Equals() 而不是该方法的重载?
如果它是相关的,这是我的方法:
public bool Equals(Episode other)
{
return Number == other.Number &&
CaseNote.Equals(other.CaseNote) &&
Patient.Equals(other.Patient);
}