当前位置:  开发笔记 > 编程语言 > 正文

C#UnitTest - 如果参数为null,Assert.AreEqual()不会调用Equals

如何解决《C#UnitTest-如果参数为null,Assert.AreEqual()不会调用Equals》经验,为你挑选了2个好方法。

我最近偶然发现一个看似奇怪的行为,谷歌完全无法解释.

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中,它失败了.它是打算像那样还是一个bug?



1> Jon Skeet..:

你的TestClass违反了合同Object.Equals.Assert.AreEqual非常合理地依靠合同.

文档说明(在要求列表中):

x.Equals(null引用(在Visual Basic中为Nothing))返回false.



2> Jon Limjap..:

测试空值时,请勿使用Assert.AreEqual.

你必须使用Assert.IsNull()它.

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有