我最近偶然发现了Google完全无法解释的看似奇怪的行为。


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中,它会失败。是要这样还是一个错误?

最佳答案

您的TestClass违反了 Object.Equals 的契约(Contract)。 Assert.AreEqual非常合理地依赖该契约(Contract)。

文档状态(在要求列表中):

  • x.Equals(空引用(在Visual Basic中为Nothing))返回false。
  • 关于C#UnitTest-如果参数为null,则Assert.AreEqual()不调用Equals,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/460371/

    10-13 08:30