您的位置:軟件測試 > 開源軟件測試 > 開源單元測試工具 >
追求代碼質(zhì)量: 探究 XMLUnit
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2013/2/25 14:18:01 ] 推薦標(biāo)簽:

注意一下我是如何實(shí)例化 XMLUnit 的 setControlParser、setTestParser 和 setSAXParserFactory 方法的。您可以為這些值使用任何兼容 JAXP 的解析器。還要注意我是用 true 調(diào)用 setIgnoreWhitespace 的 —— 這是一根救命稻草,相信我!否則,不一致的空白會(huì)導(dǎo)致很多故障。

用 Diff 比較

Diff 類支持兩種比較:identical 和 similar。如果所比較的文檔在結(jié)構(gòu)和值(如果設(shè)置了標(biāo)志忽略空白)方面都完全相同,那么它們被認(rèn)為是 identical;如果兩個(gè)文檔是完全相同的,那么它們也很自然的是 similar 的。反之,卻不一定。

例如,清單 4 是與清單 5 相似的一個(gè)簡單的 XML 代碼片段,但二者并不相同:

清單 4. 一個(gè)帳號(hào) XML 片段

    
<account>
 <id>3A-00</id>
 <name>acme</name>
</account>


清單 5 中的 XML 片段與清單 4 中所示的 XML 片段有相同的邏輯文檔。但 XMLUnit 并不認(rèn)為二者是相同的,原因是二者的 name 和 id 元素是顛倒的。

清單 5. 一個(gè)相似的 XML 片段

    
<account>
 <name>acme</name>
 <id>3A-00</id>
</account>


相應(yīng)地,我可以編寫測試用例來驗(yàn)證 XMLUnit 的行為,如清單 6 所示:

清單 6. 用來驗(yàn)證相同性和相似性的測試

    
public void testIdenticalAndSimilar() throws Exception {
 String controlXML = "<account><id>3A-00</id><name>acme</name></account>";
 String testXML = "<account><name>acme</name><id>3A-00</id></account>";
 Diff diff = new Diff(controlXML, testXML);
 assertTrue(diff.similar());
 assertFalse(diff.identical());
}


相似和相同的 XML 文檔之間的差異是很微小的;但若能驗(yàn)證兩者卻非常有用,例如在需要測試由不同應(yīng)用程序或客戶程序生成的文檔的情況下。

驗(yàn)證結(jié)構(gòu)

除了驗(yàn)證內(nèi)容之外,您還需要驗(yàn)證 XML 文檔的結(jié)構(gòu)。在這種情況下,元素和屬性的值并不重要 —— 您所關(guān)心的是結(jié)構(gòu)。

還好,我還可以再次使用清單 3 中定義的測試用例來驗(yàn)證文檔的結(jié)構(gòu),并可以有效忽略元素文本值和屬性值。為實(shí)現(xiàn)此目的,我調(diào)用 Diff 類上的 overrideDifferenceListener() 并為它添加由 XMLUnit 提供的 IgnoreTextAndAttributeValuesDifferenceListener。修改后的測試如清單 7 所示:

清單 7. 無需屬性值驗(yàn)證 XML 結(jié)構(gòu)

    
public void testToXMLFormatOnly() throws Exception{
 BatchDependencyXMLReport report =
   new BatchDependencyXMLReport(new Date(), this.getFilters());

 report.addTargetAndDependencies(
   "com.acme.web.Widget", this.getDependencies());
 report.addTargetAndDependencies(
   "com.acme.web.Account", this.getDependencies());
 
 Diff diff = new Diff(new FileReader(
   new File("./test/conf/report-control.xml")),
   new StringReader(report.toXML()));

 diff.overrideDifferenceListener(
   new IgnoreTextAndAttributeValuesDifferenceListener());
 assertTrue("XML was not similar", diff.similar());  
}

上一頁1234下一頁
軟件測試工具 | 聯(lián)系我們 | 投訴建議 | 誠聘英才 | 申請(qǐng)使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd