Java Junit测试预期结果的Xml字符串表示
我正在编写一个Junit测试,其中预期的结果是一个XML字符串。表示所需字符串的最佳方式是什么?现在,我将它作为一个stringBuilder,并执行以下操作。我想断言,实际的和预期的是相同的。表示此预期字符串的最有效方法是什么?此外,我不希望任何人改变预期的字符串,所以它也应该是最终的Java Junit测试预期结果的Xml字符串表示,java,junit,Java,Junit,我正在编写一个Junit测试,其中预期的结果是一个XML字符串。表示所需字符串的最佳方式是什么?现在,我将它作为一个stringBuilder,并执行以下操作。我想断言,实际的和预期的是相同的。表示此预期字符串的最有效方法是什么?此外,我不希望任何人改变预期的字符串,所以它也应该是最终的 @Before public void setUp() { expected.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
@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");
}
@之前
公共作废设置(){
预期。追加(“”);
预期。追加(“”);
预期。追加(“ID17A8B10BC5711DFAE41F5F92790F896IPLS”);
预期。追加(“1234567”);
预期。追加(“2010-09-1002394802323”);
预期。追加(“+反对意见驳回”);
expected.append(“我认为您的思路是正确的——定义一个字符串常量“expected\u XML”并将其断言掉。这比看起来更难-字符串比较肯定会失败。这至少是因为
- 同一实体(&apos;等)的不同表示形式
- 属性的不同顺序
- 不同的引用
- 空白
最简单的方法是在预期和测试中规范化XML,并对它们进行比较。所有好的XML工具都应该有一个规范化器
我不得不编写很多XML机制来支持我的单元测试——诚然,它们包含浮点数,我必须考虑舍入错误
但是比较字符串肯定会失败。a)XML不属于java代码内部。请将其放在同一个包中(如果使用maven,最好放在src/main/resources文件夹中),并将其作为资源加载
b)不要与XML进行字符串比较:做XML结构比较。是一个好主意。
使用字符串表示比较2个XML是危险的。确实,您考虑以下XML:
<foo>
<bar>xxx</bar>
<baz>yyy</baz>
</foo>
xxx
yyy
等于:
<foo>
<baz>yyy</baz>
<bar>xxx</bar>
</foo>
yyy
xxx
?
如果是,那么我建议您使用预期的XML测试当前XML
关于预期的XML,最好的方法是将它们存储为外部文件,并在测试期间加载它们(例如在@BeforeClass
代码段中)