【问题标题】:XmlUnit 2.x compare 2 xmls fail because of difference in namespace prefix由于命名空间前缀不同,XmlUnit 2.x 比较 2 个 xmls 失败
【发布时间】:2016-08-10 01:02:03
【问题描述】:
  • 在 java 中使用 XmlUnit 2.2.1 比较两个 xml。
  • 文档之间的唯一区别在于命名空间前缀。

这里是重现的代码sn-p:

 @Test 
 public void testDifferentPrefix() {
            final String control = "<ns:a xmlns:ns='abc'><b attr=\"xyz\"></b></ns:a>";
            final String test = "<ns1:a xmlns:ns1='abc'><b attr=\"xyz\"></b></ns1:a>";

            Diff myDiff = DiffBuilder.compare(Input.fromString(control))
                              .withTest(Input.fromString(test))
                              .build();
            Assert.assertFalse(myDiff.toString(), myDiff.hasDifferences());        
}

当上述测试运行时,它失败并出现以下错误:

预期的命名空间前缀 'ns' 但为 'ns1' - 在 /pfx:a[1] 与 /pfx:a[1] 进行比较 junit.framework.AssertionFailedError 在 NewEmptyJUnitTest.testDifferentPrefix(NewEmptyJUnitTest.java:95)

为了避免错误应该更正什么?我相信我遗漏了一些微不足道的东西。

【问题讨论】:

    标签: java xmlunit-2


    【解决方案1】:

    通过不指定任何 DifferenceEvaluator,您将隐式使用 DifferenceBuilders.DEFAULT,其中不同的命名空间前缀是“相似”的差异。

    如果您想忽略“相似”差异,您必须在DiffBuilder 上设置checkForSimilar()

    【讨论】:

    • 感谢 Stefan 的快速响应,解决了问题。
    • 你好 Stefan,但我有一些自定义的 DifferenceEvaluator 并且需要忽略名称前缀我该怎么办。我通过 DifferenceEvaluators.chain(Default, new MyEvaluator("field to ignore")) 组合它们 - 它不起作用
    猜你喜欢
    • 2012-11-01
    • 2020-04-06
    • 2020-07-23
    • 2014-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-31
    • 2019-03-01
    相关资源
    最近更新 更多