2016-07-23 91 views
1

我编写了一个序列化XML文件的单元测试。它看起来像这样:在Visual Studio中断言失败后比较字符串

[TestMethod] 
public void TestDeserialize() 
{ 
    var appValue = Persister.ReadFromXml("before.xml"); 
    Persister.WriteToXml(appValue, "after.xml"); 

    var before = File.ReadAllText("before.xml"); 
    var after = File.ReadAllText("after.xml"); 
    Assert.AreEqual(before, after); 
} 

测试失败。因此,我在Visual Studio 2015左下角的一个小窗口中说:

消息:“Assert.AreEqual”时出错。预计:< ...>实际:< ...>

在Eclipse的IntelliJ或,当我双击在测试失败,预期值和实际值的差异编辑器中打开,这样我可以快速查看他们不同。

Visual Studio是否提供了类似的功能,还是必须将文本复制到剪贴板并手动提取预期值和实际值,然后在文本编辑器中进行比较? XML文本很长,因此我想通过IDE获得一些帮助。

+0

如果我理解你,人们通常称之为“版本比较的工具”,而不是“比较编辑器”。 (我在IDE中没有使用过这个功能。) – 31eee384

+0

对于独立于IDE的方法,如果在直接窗口中调用方法,则可以创建自己的方法,以知道如何将两个字符串发送给用户的差异工具。像'assertResult.OpenTool()',它调用VS的合并工具,或kdiff3,或其他任何东西。这会有帮助吗? – 31eee384

+1

Xunit.net有更好的断言失败消息,我相信它指出了消息中的第一个地方有一个字符差异 - 不完美,但更好的IMO :) – DaveShaw

回答

-2

为了比较使用C#的两个字符串,我建议使用String.Equals方法。

public void TestDeserialize() 
{ 
    var appValue = Persister.ReadFromXml("before.xml"); 
    Persister.WriteToXml(appValue, "after.xml"); 

    var before = File.ReadAllText("before.xml"); 
    var after = File.ReadAllText("after.xml"); 
    bool before_equals_after = before.Equals(after, StringComparison.OrdinalIgnoreCase); 
} 

对于其他对象类型之间的测试平等,见IComparable https://support.microsoft.com/en-us/kb/320727