我无法使用setIgnoreWhitespace让xmlunit忽略我的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) {}
}
答案 0 :(得分:2)
我的类路径中必须有一些不兼容的XML库。如下覆盖JAXP库解决了问题(还添加了xerces和xalan jar)。
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");
答案 1 :(得分:1)
您看起来有点想要忽略任何空白字符,但这种情况并非如此。
请参阅XMLUnit.setIgnoreWhitespace
:
比较节点值时是否忽略空格。
[...]
设置此参数不会影响文本中的空白。
此设置并不意味着将删除(并且不检查)仅空白文本节点。这只会意味着在比较<test>
元素的节点值时会忽略空格。但该测试没有引起消息。在您的情况下,检查子节点的数量确实会引发消息。
有关更详细的说明和更多配置选项(例如XMLUnit.setNormalizeWhitespace
),请参阅3.8.1. Whitespace Handling。
答案 2 :(得分:-1)
以@ user392909覆盖JAXP库,对我来说没有成功。
但是我项目中与另一个图书馆的冲突是根本原因。首先,我更改了一些最终修复测试的库的导入顺序。所以我能够识别冲突的库。这是j2ee.jar。
我删除了它(并且必须用tomcat-catalina.jar,tomcat-juli.jar和javamail.jar替换它来解决即将发生的编译错误。)
导入顺序不再重要,因为j2ee.jar被删除/替换,xml diff现在按预期工作。