1

我无法让 xmlunit 使用 setIgnoreWhitespace 忽略我的 XML 中的空格...知道可能有什么问题或我可以检查什么吗?

JVM:1.6,XMLUnit 1.3,IDE:JDeveloper 11.1.1.6

例如,下面返回“预期的子节点数 '2' 但为 '1'”。如果我取出多余的空间,它就会通过。

@Test
public void testExample()  {
    String inputXML = "<test><innertest>data</innertest></test>";
    String expectedResultXml = "<test> <innertest>data</innertest></test>";

    XMLUnit.setIgnoreWhitespace(true);
    XMLUnit.setIgnoreComments(true);
    XMLUnit.setIgnoreDiffBetweenTextAndCDATA(true);

    try {
        assertXMLEqual("Did not match!!", expectedResultXml, inputXML);
    } catch(Exception e) {}
}
4

3 回答 3

2

我的类路径中必须有一些不兼容的 XML 库。如下覆盖 JAXP 库解决了该问题(还添加了 xerces 和 xalan jars)。

    XMLUnit.setControlParser("org.apache.xerces.jaxp.DocumentBuilderFactoryImpl");
    XMLUnit.setTestParser("org.apache.xerces.jaxp.DocumentBuilderFactoryImpl");
    XMLUnit.setSAXParserFactory("org.apache.xerces.jaxp.SAXParserFactoryImpl");
    XMLUnit.setTransformerFactory("org.apache.xalan.processor.TransformerFactoryImpl"); 
于 2012-12-12T11:21:15.703 回答
1

您似乎有点期望忽略任何空白字符,但该设置并非如此。

XMLUnit.setIgnoreWhitespace

比较节点值时是否忽略空格。

[...]

设置此参数对文本内的空白没有影响。

此设置并不意味着将删除仅包含空格的文本节点(并且不检查)。这仅意味着在比较<test>元素的节点值时忽略空格。但是那个测试并没有引起这个消息。在您的情况下,检查子节点的数量确实会引发消息。

3.8.1。空白处理以获得更详细的描述和更多配置选项(例如XMLUnit.setNormalizeWhitespace)。

于 2012-12-12T12:45:16.393 回答
-1

像@user392909 那样覆盖 JAXP 库对我来说没有成功。

但是与我项目中的另一个库发生冲突是根本原因。首先,我更改了一些库的导入顺序,最终修复了测试。所以我能够识别出冲突的库。它是 j2ee.jar。

我删除了它(并且不得不用 tomcat-catalina.jar、tomcat-juli.jar 和 javamail.jar 替换它以解决即将出现的编译错误)。

导入顺序不再重要,因为 j2ee.jar 已被删除/替换并且 xml 差异现在按预期工作。

于 2015-09-24T13:43:42.133 回答