【发布时间】:2017-09-25 12:19:07
【问题描述】:
我正在尝试仅部分使用 XMLUnit2 比较两个 xml。我尝试在 Xpath 下单独比较元素 int。但是我的测试失败了,因为它也在检查boolean 标签。
如何让这个测试通过?
@Test
public void diff_through_xPath(){
String myControlXML = "<struct><boolean>false</boolean><int>3</int></struct>";
String myTestXML = "<struct><boolean>true</boolean><int>3</int></struct>";
ElementSelector childSelector = selectorForElementNamed("int", byXPath("//int", byName));
Diff myDiffSimilar = DiffBuilder.compare(myControlXML).withTest(myTestXML)
.withNodeMatcher(new DefaultNodeMatcher(childSelector, byName))
.checkForSimilar()
.ignoreWhitespace()
.build();
assertFalse("XML similar " + myDiffSimilar.toString(),
myDiffSimilar.hasDifferences());
}
编辑: 使用 NodeFilter,我从比较中删除了不需要的节点。但是有没有办法给出 Xpath,并且只比较由 XPath 评估的节点。
@Test
public void diff_through_xPath() {
String myControlXML = "<struct><boolean>false</boolean><int>3</int></struct>";
String myTestXML = "<struct><boolean>true</boolean><int>3</int></struct>";
Diff myDiffSimilar = DiffBuilder.compare(myControlXML).withTest(myTestXML)
.withNodeFilter(new Predicate<Node>() {
public boolean test(Node node) {
return !node.getNodeName().equals("boolean"); //ignores all child nodes from of 'a'.
}
})
//.checkForSimilar()
.ignoreWhitespace()
.build();
assertFalse("XML similar " + myDiffSimilar.toString(),
myDiffSimilar.hasDifferences());
}
【问题讨论】:
-
我不确定我是否理解您想要比较的内容。你想比较
structs 还是只比较ints?NodeMatcher用于决定一组兄弟节点中的哪些节点可以相互比较,它对哪些节点有资格进行比较根本没有任何影响。你可以使用NodeFilter去掉那些你不想要的。 -
我只想比较两个 xml 中的 'int' 标签。我不在乎布尔标记是否匹配。
-
正如我所编辑的,我可以使用 Nodefilter 删除不需要的节点。有没有办法使用 Xpath 并进行比较?
标签: java junit xmlunit xmlunit-2