MR-Unit против JUnit для модульного тестирования

Может ли кто-нибудь объяснить, в чем преимущество использования MR-Unit для модульного тестирования заданий MR по сравнению с использованием JUnit и Mockito?

Конкретно, какие вещи я могу сделать, чего я не могу сделать с помощью JUnit, или это намного сложнее?

Моя идея состоит в том, чтобы перенести всю логику из картографов/редьюсеров во вспомогательные классы и просто проверить, вызываются ли соответствующие методы на моках.

Зачем использовать MR-Unit?


person Kobe-Wan Kenobi    schedule 10.04.2016    source источник


Ответы (1)


Я думаю, что самая важная вещь, которую дает вам mrunit, — это DSL для тестирования задач mapreduce. Модульные тесты должны быть удобочитаемыми и рассказывать историю, поэтому, если у вас есть API, который соответствует предметной области, становится легче писать тесты и понимать их позже.

Другая, возможно, не менее важная вещь заключается в том, что это дает гораздо лучшие ошибки утверждений и различия, чем утверждения JUnit по умолчанию.

Конечно, вы, вероятно, также можете просто придерживаться JUnit, но в конечном итоге вы можете перереализовать большую часть mrunit функционально наполовину.

Но это не или/или, потому что я вижу домен mrunit немного другим. Это заставляет вас думать о своей работе очень просто: если вы вкладываете определенные вещи, вы хотите получить определенные вещи (и, возможно, некоторые счетчики увеличиваются), тогда как тесты JUnit часто проверяют какую-то логику. Так что, конечно, вы можете поместить и протестировать свою логику отдельно (и, вероятно, даже должны, если у вас сложная логика) и использовать mrunit для своего рода тестирования «черного ящика», где вам все равно, где и как реализована логика, пока вы получить правильные результаты для ваших входов.

person David Ongaro    schedule 17.05.2016