Unit testing 有人能解释为什么这个单元测试失败了吗?
这让我们中的一些人感到困惑。这是VS2013,代码本身构建正确,正如您从图像中看到的。我们在两台不同的机器上运行了此测试,结果相同 我确实在MS OneNote中复制/粘贴了最初的代码,因此可能是有原因的。但正如您从记事本++中看到的,似乎没有任何特殊字符 想法 要对此进行扩展,以下版本也会失败: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
//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.";.