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

时间:2010-11-02 17:12:03

标签: java junit

我正在编写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");
}

4 个答案:

答案 0 :(得分:3)

a)XML不属于java代码。将它放在同一个包中(如果使用maven,最好放在src / main / resources文件夹中)并将其作为资源加载。

b)不要与XML进行字符串比较:进行XML结构比较。 The canonicalizer是一个好主意。

答案 1 :(得分:1)

这比它看起来更难 - 字符串比较肯定会失败。这是因为至少

  • 相同实体(&amp;,等)的不同表示
  • 不同的属性顺序
  • 不同的引语
  • 空白

最简单的方法是在预期和测试中规范化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”并断言它。