XMLUnit - игнорирование атрибута 'id' в сравнении - PullRequest
9 голосов
/ 09 марта 2011

Я сейчас работаю с XMLUnit, и мне интересно, есть ли способ настроить его на игнорирование только атрибута id тегов, которые я хочу сравнить.

Заранее спасибо за помощь.

Ответы [ 2 ]

8 голосов
/ 06 июля 2012

Решение довольно простое.Вы можете настроить 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=\".*\"")

PS Смотри также: http://xmlunit.sourceforge.net/api/org/custommonkey/xmlunit/Difference.html

1 голос
/ 09 марта 2011

Я попытаюсь реализовать свой собственный DifferenceListener для удовлетворения этой потребности (см. в этом посте ). Собираюсь опубликовать результат в ближайшее время. Это похоже на работу, завтра опубликую реализацию.

...