Как протестировать редюсер, содержащий мутацию

Я пытаюсь использовать MRUnit, но ни один из примеров, которые я видел, не соответствует тому, что я пытаюсь сделать.

Мой редуктор выводит ключ и мутацию, но я не могу сравнить мутацию с ожидаемой. Он показывает объекты как одинаковые, но с адресом 0 и следующей ошибкой:

junit.framework.AssertionFailedError: expected: <org.apache.accumulo.core.data.Mutation@0> but was <org.apache.accumulo.core.data.Mutation@0>

Я использую метод reduceDriver.run() и пытаюсь использовать assertEquals для моего ожидаемого объекта мутации с фактическим. Есть ли что-то, что я упускаю?

Спасибо за любой вклад.


person CNDyson    schedule 30.08.2013    source источник


Ответы (3)


Mutation не имеет соответствующей реализации equals(). вам лучше всего, вероятно, сравнить результаты getUpdates() и getRow(). Они возвращают List и byte[] соответственно, и их легко сравнить.

person ohshazbot    schedule 24.09.2013

Mutation имеет соответствующий метод equals(), по крайней мере, в строке 1.4.x. Однако этот метод вызывает закрытый метод serialize(), который изменяет данные, подлежащие проверке.

Я обошел это в прошлом, обернув мутацию в новую мутацию, которая вызывает сериализацию под капотом:

 assertEquals(expectedMutation, new Mutation(actualMutation));
person tequalsme    schedule 24.09.2013

Вы можете расширить Mutation и передать новый класс mrunit. Просто переопределите equals в новом классе.

person David Medinets    schedule 26.09.2013