Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Junit测试预期结果的Xml字符串表示_Java_Junit - Fatal编程技术网

Java Junit测试预期结果的Xml字符串表示

Java Junit测试预期结果的Xml字符串表示,java,junit,Java,Junit,我正在编写一个Junit测试,其中预期的结果是一个XML字符串。表示所需字符串的最佳方式是什么?现在,我将它作为一个stringBuilder,并执行以下操作。我想断言,实际的和预期的是相同的。表示此预期字符串的最有效方法是什么?此外,我不希望任何人改变预期的字符串,所以它也应该是最终的 @Before public void setUp() { expected.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");

我正在编写一个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");
}
@之前
公共作废设置(){
预期。追加(“”);
预期。追加(“”);
预期。追加(“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
代码段中)