Unit testing 有人能解释为什么这个单元测试失败了吗?

Unit testing 有人能解释为什么这个单元测试失败了吗?,unit-testing,visual-studio-2013,Unit Testing,Visual Studio 2013,这让我们中的一些人感到困惑。这是VS2013,代码本身构建正确,正如您从图像中看到的。我们在两台不同的机器上运行了此测试,结果相同 我确实在MS OneNote中复制/粘贴了最初的代码,因此可能是有原因的。但正如您从记事本++中看到的,似乎没有任何特殊字符 想法 要对此进行扩展,以下版本也会失败: //Note: Why this does not pass is baffling [TestMethod] public void FunnyTestThatFails

这让我们中的一些人感到困惑。这是VS2013,代码本身构建正确,正如您从图像中看到的。我们在两台不同的机器上运行了此测试,结果相同

我确实在MS OneNote中复制/粘贴了最初的代码,因此可能是有原因的。但正如您从记事本++中看到的,似乎没有任何特殊字符

想法

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

    //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());
    }
您使用的是(在本例中)寻找引用相等的

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

使用

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

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

(此处用于格式化;现有答案也解释了发生的情况。这只是问题代码的十六进制转储。)


字符串不一样。

可能比较引用相等。通常有一个
StringAssert
类用于此。(我刚检查过,)异常消息说什么?@mclaassen,附加信息:Assert.AreEqual失败。预期:。实际:。到目前为止,唯一能让它通过的是(用键盘)实际重新键入以下行:b=“找不到Web会话。”@BenPower仔细查看记事本++文本:
a
b
之间的单词之间的空格不同(前者匹配如
expectedErrorMessage
所示)。我不知道
a
expectedErrorMessage
中的字符是什么,但它们看起来不像是普通的ASCII空格字符。至于为什么它适用于第一种情况而不适用于第二种情况,有一些相关信息。Assert.AreEqual(expectedErrorMessage,b,true);导致相同错误:其他信息:Assert.AreEqual失败。预期:。实际:。此外,我已经将它们全部作为字符串键入,并且它表现出相同的行为。请参阅上面的编辑。尝试将其复制并粘贴到记事本中,然后执行file=>save=>ansi编码(或ASCII或其他任何编码)。如果你在保存时收到警告,你可能会有一些你没有预料到的角色。事实上,这已经解开了谜团。谢谢const string expectedErrorMessage=“未找到Web会话。”;var a=“未找到Web会话。”;string b=“找不到Web会话。”;
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.";.