2008-11-09 74 views
9

我有一堆需要檢查XML輸出的單元測試。在.NET中比較2個XML文檔的最佳方法

我已經開始比較字符串了,但是這並不會隨着格式和表面差異的發展而變大。

.NET中最簡單的方法是評估生成的XML在語義上是否與測試期望的相同?

關閉How would you compare two XML Documents?

+0

同樣的問題[here](http://stackoverflow.com/questions/167946/how-would-you-compare-two-xml-documents)。 – 2008-11-09 12:01:18

回答

11

微軟提供的XML比較工具/班here重複。我沒有親自使用過它,但它聽起來像它會幫助您入門:

「通過使用中的xmldiff班, 程序員能夠確定 兩個文件實際上都是基於不同 對那些重要 到他們的應用程序」的條件

看來,以應付不同的排序,間距,命名空間前綴等等

5

這是這聽起來像它會很容易的問題之一開始w第一,但是越深入挖掘問題空間。

有一些預先存在的工具可以執行xml diffs - 既可以以GUI的方式(與文本diff工具相同),也可以是命令行驅動的/組件(它們更像是「 d之後)。正如已經提到的那樣,XMLDiff就是這種情況。

當您提出如下問題時,麻煩就開始了 - 我希望它輸出什麼?你只是想要一個返回代碼,說明它們是相同的還是不同的(爲了單元測試的目的,這實際上已經足夠了) - 或者你想要一份報告來告訴你它們有什麼不同? (如果你想找到問題所在,也可以用於單元測試)?如果是後者,你如何獲得這些信息?你想編輯距離嗎? 你想讓它解釋數值並告訴你它們之間的區別嗎?

節點排序怎麼樣?子節點是否應該按照特定的順序 - 或者它們是否是相同的節點,但順序不同?

您可能還希望能夠指定要比較的內容。命名空間應該匹配嗎?任何地方都有空白嗎?是否有某些節點總是要忽略(例如「時間」屬性),還是您希望更精確地控制哪些節點進行比較,哪些節點沒有?

對於數值比較,你想允許公差嗎?對於文本比較(文本節點)來說,之間的空格是否有意義?大寫字母怎麼樣? (你可以繼續下去)(正如我剛剛在最近工作的一個項目的分析中所做的那樣)。

每種工具都以不同程度和不同方式解決了這些問題。

你可能會決定儘可能簡單地去做,並且做一些直接的,逐節點的,比較的,沒有解釋的東西 - 最後告訴你它們是相同的還是不同的。我相信xmldiff會給你(還有一點點)。同樣值得一提的是,如果您確實想要處理諸如不同節點排序或忽略某些分支的情況,您可以在比較之前將xslt轉換應用於測試文檔,以根據您的規則對其進行規範化。