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行分隔符?
如何在十六进制编辑器中打开两个版本以检查奇怪的EOL字节和内容? – Will 2013-03-19 20:08:57
[也许试试xmlunit](http://stackoverflow.com/questions/13727876/comparing-two-xml-strings-files-in-groovy-java)? – 2013-03-19 20:20:11
@WillP好的。有时候你花了很多时间看到你的大脑停止工作了。检查我的更新 – 2013-03-19 20:22:32