【问题标题】:Xml string representation of expected result for Junit testJunit 测试的预期结果的 XML 字符串表示
【发布时间】:2011-05-04 01:47:22
【问题描述】:

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

【问题讨论】:

    标签: java junit


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      • 同一实体的不同表示(& 等)
      • 属性的不同顺序
      • 不同的报价
      • 空格

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

      我不得不编写大量 XML 机制来支持我的单元测试 - 诚然它们包含浮点数,我必须考虑舍入错误。

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

      【讨论】:

        【解决方案3】:

        使用它们的字符串表示比较 2 个 XML 是危险的。确实,您是否考虑过以下 XML:

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

        等于:

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

        ?

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

        关于预期的 XML,最好的方法是将它们存储为外部文件,并在测试期间加载它们(例如在 @BeforeClasssn-p 中)。

        【讨论】:

          【解决方案4】:

          我认为你走在正确的轨道上——定义一个字符串常量“EXPECTED_XML”,然后断言。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-09-18
            • 2012-05-23
            • 2023-03-09
            • 1970-01-01
            • 1970-01-01
            • 2016-01-16
            相关资源
            最近更新 更多