我有这样的XML消息:

<root>
  <elementA>something</elementA>
  <elementB>something else</elementB>
  <elementC>yet another thing</elementC>
</root>

我想将被测试方法产生的这种类型的消息与预期消息进行比较,但是我不在乎elementA。因此,我希望以上消息被认为等于:
<root>
  <elementA>something different</elementA>
  <elementB>something else</elementB>
  <elementC>yet another thing</elementC>
</root>

我正在使用最新版本的XMLUnit

我在想答案是创建一个自定义的DifferenceListener;如果有准备好要使用的东西,我只是不想重新发明轮子。

欢迎使用XMLUnit以外的库的建议。

最佳答案

自从回答了这个问题以来,XMLUnit的情况发生了很大变化。

现在,使用DiffBuilder时,您可以轻松地忽略节点:

final Diff documentDiff = DiffBuilder
            .compare(expectedSource)
            .withTest(actualSource)
            .withNodeFilter(node -> !node.getNodeName().equals(someName))
            .build();

如果再调用documentDiff.hasDifferences(),则添加到过滤器的节点将被忽略。

09-25 19:43