2010-11-02 36 views
3

我在写一个Junit测试,其中预期的结果是一个XML字符串。代表预期字符串的最佳方式是什么?现在我把它作为一个stringBuilder,我做了以下。我想断言实际和预期是相同的。什么是最有效的方式来表示这个预期的字符串?另外我不希望任何人改变预期的字符串,所以它也应该是最终的。Junit测试的预期结果的Xml字符串表示

@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"); 
} 

回答

3

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

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

0

我想你是在正确的轨道上 - 定义一个字符串常量“EXPECTED_XML”,只是断言。

1

这比看起来更难 - 字符串比较肯定会失败。这是因为对于相同的实体至少

  • 不同的表示(&'等)
  • 不同订单属性的
  • 不同报价
  • 空白

最简单的方法是在期望和测试中对XML进行canonicalise并对其进行比较。所有好的XML工具都应该有一个规范化器。

我不得不写很多XML机制来支持我的单元测试 - 无可否认,它们包含浮点数,我必须考虑舍入错误。

但是比较字符串肯定会失败。

+0

+1规范化器 – 2010-11-02 17:26:20

1

使用它们的字符串表示法比较2 XML是很危险的。事实上,你考虑以下XML:

<foo> 
    <bar>xxx</bar> 
    <baz>yyy</baz> 
</foo> 

等于:

<foo> 
    <baz>yyy</baz> 
    <bar>xxx</bar> 
</foo> 

如果是,那么我建议您使用XMLUnit来测试您的当前XML与预期的一个。

关于预期的XML,最好的方法是将它们存储为外部文件,并在测试过程中加载它们(例如@BeforeClass代码片段)。

相关问题