0

我正在编写一个单元测试来验证 xml 的格式是否正确,但这失败了,我不知道为什么。

所以我决定测试这篇博文的代码并在 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>

我在 Windows 7 上使用 Grails 2.2.1,它使用 Groovy 2.0.7。

也许与操作系统行分隔符有关?

编辑

我将两个字符串都保存到文件中,并使用 Notepad++ 进行了检查

解析的 xml (XmlUtils) 具有CL+RF作为行分隔符,但prettyXml只有LF. 我还测试了使用\n而不是多行声明,结果相同!

Groovy 不应该CL+RF总是使用,因为这是 Windows 行分隔符?

4

1 回答 1

0

Groovy String/GString docs中,它说与多行文字有关:

There[sic] 总是由字符 '\n' 表示,而不管主机系统的行终止约定。

不幸的是,他们并没有真正说明原因。

于 2013-03-19T21:40:36.493 回答