我有幾個單元測試,我需要確保由方法生成的XML包含與預期的Xml文檔相同的元素/值。.net單元測試的Xml比較器
我在Java中使用了xmlunit,儘管它們有.net版本,但似乎並不支持命名空間。在.net中是否有替代方案?
只要我可以比較兩個XML字符串中,並得到一個真/假結果告訴我,如果他們儘可能包含的數據而言,我很高興匹配...
我有幾個單元測試,我需要確保由方法生成的XML包含與預期的Xml文檔相同的元素/值。.net單元測試的Xml比較器
我在Java中使用了xmlunit,儘管它們有.net版本,但似乎並不支持命名空間。在.net中是否有替代方案?
只要我可以比較兩個XML字符串中,並得到一個真/假結果告訴我,如果他們儘可能包含的數據而言,我很高興匹配...
嘗試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 MS的Xml打上補丁只是節點。是否有比http://msdn.microsoft.com/en-us/library/Aa302294更好的下載鏈接? – 2011-05-05 12:25:09
我認爲就是這樣。這是一個非常古老的庫(但XML也是如此)。它像一個魅力。 – Nestor 2011-05-05 12:29:22
您也可以通過Visual Studio中的NuGet包管理器下載MS XMLDiffPatch。 – 2016-07-26 18:11:45
我通常發現XNode.DeepEquals已經足夠滿足我的需求。它是BCL的一部分,所以不需要下載。
我已經使用過MS的XMLDiff,但是更喜歡使用Beyond Compare 3,因爲它具有更好的GUI和批處理功能(儘管有.NET API)。
爲您的測試,使用XNode.DeepEquals或InnerXML比較基於字符串表示
東西要記住大約MSXML的xmldiff是,如果你是比較非常大的XML文檔,確保您的XMLDiff.Algorithm
是不集到「精確」,否則可能會導致內存不足。默認情況下,它被設置爲Auto,這是一個安全的選擇,因爲API將根據文件大小,檢測到的差異數量和其他因素選擇是使用Precise還是Fast。下面是技術上更傾向於一個良好的閱讀:
你想比較命名空間爲好,或者包含在XML – 2011-05-05 12:19:38