谁能解释为什么这个单元测试失败了?

时间:2014-06-25 02:08:59

标签: unit-testing visual-studio-2013

这让我们中的一些人感到难过。它是VS2013,正如您从图像中看到的那样,代码本身可以正确构建。我们在2台不同的机器上运行此测试,结果相同。

我最初将代码复制/粘贴到MS OneNote中,因此可能存在原因。但正如您在Notepad ++中看到的那样,似乎没有任何特殊字符。

想法?

enter image description here

enter image description here

要对此进行扩展,以下版本也会失败:

    //Note: Why this does not pass is baffling
    [TestMethod]
    public void FunnyTestThatFailsForSomeReason()
    {
        const string expectedErrorMessage = "Web Session Not Found.";

        var a = "Web Session Not Found.";
        string b = "Web Session Not Found.";

        Assert.AreEqual(expectedErrorMessage, a);
        //Assert.AreEqual(expectedErrorMessage, b);
        Assert.AreEqual(expectedErrorMessage.ToString(), b.ToString());
    }

2 个答案:

答案 0 :(得分:2)

您正在使用Assert.AreEqual(Object, Object)(在这种情况下)正在寻找引用相等性。 It's not going to work the way you want it to

  

验证两个指定的对象是否相等。如果对象不相等,则断言失败。

使用Assert.AreEqual(String, String, Boolean)

  

验证两个指定的字符串是否相等,忽略大小写或不指定大小写。如果断言不相等,断言就会失败。

或者更简单地说,你的字符串 略有不同。复制和粘贴似乎产生了不同的结果:

Chrome

答案 1 :(得分:0)

(这里出于格式化目的;现有的答案也解释了发生了什么。这只是你问题代码的十六进制转储。)

00000000:  2020 2020 7661 7220 6120 3d20 2257 6562 c2a0 5365 7373 696f  :    var a = "Web..Sessio
00000018:  6ec2 a04e 6f74 c2a0 466f 756e 642e 223b 0a20 2020 2020 2020  :n..Not..Found.";.       
00000030:  2020 2020 2073 7472 696e 6720 6220 3d20 2257 6562 2053 6573  :     string b = "Web Ses
00000048:  7369 6f6e 204e 6f74 2046 6f75 6e64 2e22 3b0a                 :sion Not Found.";.

字符串不一样。