我最近偶然發現了一個Google完全無法解釋的看似奇怪的行爲。如果參數爲null,則C#UnitTest - Assert.AreEqual()不會調用Equals。
using Microsoft.VisualStudio.TestTools.UnitTesting;
class TestClass
{
public override bool Equals(object obj)
{
return true;
}
}
[TestMethod]
public void TestMethod1()
{
TestClass t = new TestClass();
Assert.AreEqual (t, null); // fails
Assert.IsTrue (t.Equals (null)); // passes
}
我希望這個測試成功。但是,在Visual Studio 2008/.NET 3.5中失敗。它是打算如此還是它是一個錯誤?
由於NUnit中的期望值始終是第一個,所以您從約定向後使用AreEqual()。我無法從文檔中知道它是否將null與null進行比較,或者將null與t進行比較,所以我不會稱之爲可靠的測試。 – Ken 2009-08-20 18:32:41