2013-03-19 109 views
0

我正在寫一個單元測試,驗證xml是否格式正確,但這是失敗的,我不明白爲什麼。Groovy漂亮打印XML斷言失敗

所以我決定測試代碼this blog post並在Grails控制檯中測試,它也失敗了。

import groovy.xml.* 

def prettyXml = '''\ 
<?xml version="1.0" encoding="UTF-8"?> 
<languages> 
    <language id="1">Groovy</language> 
    <language id="2">Java</language> 
    <language id="3">Scala</language> 
</languages> 
''' 


// Pretty print a non-formatted XML String. 
def xmlString = '<languages><language id="1">Groovy</language><language id="2">Java</language><language id="3">Scala</language></languages>' 
assert XmlUtil.serialize(xmlString) == prettyXml 

斷言失敗:

Assertion failed: 

assert XmlUtil.serialize(xmlString) == prettyXml 
       |   |   | | 
       |   |   | <?xml version="1.0" encoding="UTF-8"?> 
       |   |   | <languages> 
       |   |   | <language id="1">Groovy</language> 
       |   |   | <language id="2">Java</language> 
       |   |   | <language id="3">Scala</language> 
       |   |   | </languages> 
       |   |   false 
       |   <languages><language id="1">Groovy</language><language id="2">Java</language><language id="3">Scala</language></languages> 
       <?xml version="1.0" encoding="UTF-8"?> 
       <languages> 
       <language id="1">Groovy</language> 
       <language id="2">Java</language> 
       <language id="3">Scala</language> 
       </languages> 

我使用Grails 2.2.1,使用Groovy的2.0.7,在Windows 7

也許是與操作系統相關的線東西分隔器?

編輯

我救了兩個字符串的文件,用記事本++

分析的XML(XmlUtils)有CL+RF作爲行分隔符,但prettyXml只有LF檢查。我還測試了使用\n而不是多行聲明,結果相同!

Groovy不應該總是使用CL+RF,因爲這是Windows行分隔符?

+0

如何在十六進制編輯器中打開兩個版本以檢查奇怪的EOL字節和內容? – Will 2013-03-19 20:08:57

+2

[也許試試xmlunit](http://stackoverflow.com/questions/13727876/comparing-two-xml-strings-files-in-groovy-java)? – 2013-03-19 20:20:11

+0

@WillP好的。有時候你花了很多時間看到你的大腦停止工作了。檢查我的更新 – 2013-03-19 20:22:32

回答

0

Groovy String/GString docs,它說相對於多行的文字:

有[原文如此]總是由字符「\ n」表示,而不管 主機的行終止約定系統。

不幸的是,他們並不真正說出原因。