2011-05-05 83 views
8

我有幾個單元測試,我需要確保由方法生成的XML包含與預期的Xml文檔相同的元素/值。.net單元測試的Xml比較器

我在Java中使用了xmlunit,儘管它們有.net版本,但似乎並不支持命名空間。在.net中是否有替代方案?

只要我可以比較兩個XML字符串中,並得到一個真/假結果告訴我,如果他們儘可能包含的數據而言,我很高興匹配...

+0

你想比較命名空間爲好,或者包含在XML – 2011-05-05 12:19:38

回答

3

嘗試Microsoft.XmlDiffPatch:

static public bool IsXmlEqual(XmlReader x1, XmlReader x2, 
    bool IgnoreChildOrder, bool IgnoreComments, bool IgnorePI, bool IgnoreWhitespace, 
    bool IgnoreNamespaces, bool IgnorePrefixes, bool IgnoreXmlDecl, bool IgnoreDtd 
) 
{ 
    XmlDiffOptions options = XmlDiffOptions.None; 
    if (IgnoreChildOrder) options |= XmlDiffOptions.IgnoreChildOrder; 
    if (IgnoreComments) options |= XmlDiffOptions.IgnoreComments; 
    if (IgnorePI) options |= XmlDiffOptions.IgnorePI; 
    if (IgnoreWhitespace) options |= XmlDiffOptions.IgnoreWhitespace; 
    if (IgnoreNamespaces) options |= XmlDiffOptions.IgnoreNamespaces; 
    if (IgnorePrefixes) options |= XmlDiffOptions.IgnorePrefixes; 
    if (IgnoreXmlDecl) options |= XmlDiffOptions.IgnoreXmlDecl; 
    if (IgnoreDtd) options |= XmlDiffOptions.IgnoreDtd; 

    XmlDiff xmlDiff = new XmlDiff(options); 
    bool bequal = xmlDiff.Compare(x1, x2, null); 
    return bequal; 
} 
+1

+1 MS的Xml打上補丁只是節點。是否有比http://msdn.microsoft.com/en-us/library/Aa302294更好的下載鏈接? – 2011-05-05 12:25:09

+0

我認爲就是這樣。這是一個非常古老的庫(但XML也是如此)。它像一個魅力。 – Nestor 2011-05-05 12:29:22

+0

您也可以通過Visual Studio中的NuGet包管理器下載MS XMLDiffPatch。 – 2016-07-26 18:11:45

7

我通常發現XNode.DeepEquals已經足夠滿足我的需求。它是BCL的一部分,所以不需要下載。

0

我已經使用過MS的XMLDiff,但是更喜歡使用Beyond Compare 3,因爲它具有更好的GUI和批處理功能(儘管有.NET API)。

爲您的測試,使用XNode.DeepEquals或InnerXML比較基於字符串表示

1

東西要記住大約MSXML的xmldiff是,如果你是比較非常大的XML文檔,確保您的XMLDiff.Algorithm集到「精確」,否則可能會導致內存不足。默認情況下,它被設置爲Auto,這是一個安全的選擇,因爲API將根據文件大小,檢測到的差異數量和其他因素選擇是使用Precise還是Fast。下面是技術上更傾向於一個良好的閱讀:

http://treepatch.sourceforge.net/report.pdf