2016-07-23 88 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