我正在编写Junit测试,其中预期的结果是XML字符串。什么是表示预期字符串的最佳方式?现在我把它作为stringBuilder,我做了以下。我想断言实际和预期是一样的。表示这个预期字符串的最有效方法是什么?此外,我不希望任何人改变预期的字符串,所以它也应该是最终的。
@Before
public void setUp() {
expected.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
expected.append("<n-relationship guid=\"IEEBFAD40BC5711DFAE41F5F92790F896\" control=\"add\">");
expected.append("<n-relbase>ID17A8B10BC5711DFAE41F5F92790F896</n-relbase><n-reltype>IPLS</n-reltype>");
expected.append("<ip.content><pub.no>1234567</pub.no>");
expected.append("<event.date>2010-09-10</event.date><event.code>02394802323</event.code>");
expected.append("<event.treatment>+</event.treatment><event.description>OPPOSITION DISMISSED</event.description>");
expected.append("</ip.content></n-relpayload></n-relationship");
}
答案 0 :(得分:3)
a)XML不属于java代码。将它放在同一个包中(如果使用maven,最好放在src / main / resources文件夹中)并将其作为资源加载。
b)不要与XML进行字符串比较:进行XML结构比较。 The canonicalizer是一个好主意。
答案 1 :(得分:1)
这比它看起来更难 - 字符串比较肯定会失败。这是因为至少
最简单的方法是在预期和测试中规范化XML并对其进行比较。所有优秀的XML工具都应该有一个规范化的工具。
我不得不编写很多XML机制来支持我的单元测试 - 诚然,它们包含浮点数,我必须允许舍入错误。
但比较字符串肯定会失败。
答案 2 :(得分:1)
使用String表示法比较2 XML是危险的。实际上,您是否考虑以下XML:
<foo>
<bar>xxx</bar>
<baz>yyy</baz>
</foo>
等于:
<foo>
<baz>yyy</baz>
<bar>xxx</bar>
</foo>
如果是,那么我建议您使用XMLUnit来测试当前的XML与预期的XML。
关于预期的XML,最好的方法是将它们存储为外部文件,并在测试期间加载它们(例如,在@BeforeClass
代码段中)。
答案 3 :(得分:0)
我认为你在正确的轨道上 - 定义一个字符串常量“EXPECTED_XML”并断言它。