我目前正在使用XMLUnit,我想知道是否有办法将其配置为忽略仅我想要比较的标签的id
属性。
提前感谢您的帮助。
答案 0 :(得分:8)
解决方案非常简单。您可以配置DifferenceEngine
来处理ATTR_VALUE
差异。编写实现DifferenceListener的自定义差异侦听器类:
class IgnoreIDsDifferenceListener implements DifferenceListener {
private static final int[] IGNORE_VALUES = new int[] {
DifferenceConstants.ATTR_VALUE.getId(),
};
private boolean isIgnoredDifference(Difference difference) {
int differenceId = difference.getId();
for (int i=0; i < IGNORE_VALUES.length; ++i) {
if (differenceId == IGNORE_VALUES[i]) {
return true;
}
}
return false;
}
public int differenceFound(Difference difference) {
if (isIgnoredDifference(difference)) {
return RETURN_IGNORE_DIFFERENCE_NODES_IDENTICAL;
} else {
return RETURN_ACCEPT_DIFFERENCE;
}
}
public void skippedComparison(Node control, Node test) {
}
}
这里要求的是检查属性名称是否为“id”。标准Java DOM功能可以提供帮助。但我更喜欢通过正则表达式来实现这一点:
String controlNode = difference.getControlNodeDetail().getNode().toString();
controlNode .matches("^id=\".*\"")
P.S。另见:http://xmlunit.sourceforge.net/api/org/custommonkey/xmlunit/Difference.html
答案 1 :(得分:1)
我将尝试实现自己的DifferenceListener来处理这种需求(参见this post)。要尽快发布结果。它似乎有效,明天将发布实施。