В чем разница между платформами PowerMock, EasyMock и Mockito?

Я очень новичок в насмешливой структуре, и моя работа требует насмешливой структуры для завершения модульного тестирования. В текущей базе кода, которую я видел выше, три фреймворка используются в разных местах для модульного тестирования. Итак, к чему я должен идти в вышеуказанных трех рамках?

Ответ 1

Я даю вам объяснение, которое другим людям, вероятно, не понравится, но я (и многие люди, о которых я упоминал), нашел/нашел очень полезным: PowerMock - это фальшивый фреймворк... который лучше не использовать.

Основное преимущество PowerMock заключается в том, что вы можете использовать его для тестирования определенных конструкций (например, вызовов статических методов), которые EasyMock не может смоделировать. Таким образом: когда вы хотите протестировать сторонний код, который вы не можете изменить; и который содержит статические вызовы; тогда вы можете обратиться к PowerMock.

Но когда вы пишете свой собственный код и сосредотачиваетесь на написании тестируемого кода; тогда вы обнаружите, что "необходимость использовать PowerMock" абсолютно равна "вы плохо выполнили проектирование своего кода". Например, использование статики напрямую приводит к прямой связи между вашими классами; и поэтому трудно избавиться от него, как только он войдет.

Не поймите меня неправильно - PowerMock имеет свое место в тестировании; но его мощные функции имеют определенную стоимость.

На EasyMock/Mockito: в основном "два разных способа" записи тестовых случаев; последний ведет к тестам, которые многие люди находят более легкими для чтения; в то время как EasyMock и "строгие" макеты позволяют записывать тестовые примеры, которые быстро ломаются при большинстве изменений в вашем производственном коде (что само по себе может быть очень полезным или очень раздражающим).

Ответ 2

Здесь вы можете найти сравнение между Mockito и EasyMock:

Различия

  • Нет режимов записи/воспроизведения - им не нужно. Там только 2 вещи, которые вы можете сделать с Mockito mocks - проверить или заглушить.

    Ступенька идет перед выполнением и проверкой впоследствии.
  • Все маски приятны (даже лучше, потому что методы возврата коллекции возвращают пустые коллекции вместо нулей). Несмотря на то, что приколы приятны, вы можете проверить их так строго, как хотите, и обнаружить любое нежелательное взаимодействие.

  • Явный язык для лучшей читаемости: verify() и when() VS смесь expect (mock.foo()) и mock.foo() (вызов простого метода без ожидания). Я уверен, что некоторые из вас найдут этот аргумент субъективным:)

  • Упрощенная модель stubbing - зашитые методы воспроизводят все время с заштрихованным значением независимо от того, сколько раз они вызываются. Работает точно так же, как EasyMock иStubReturn(), иStubThrow(). Кроме того, вы можете заглушить разные значения возвратов для разных аргументов (например, в EasyMock).

  • Проверка закодированных методов не является обязательной, потому что обычно более важно проверить правильность использования заштрихованного значения, а не на том, откуда оно взялось.

  • Проверка явная - ошибки проверки указывают на строку кода, показывающую, что не удалось выполнить взаимодействие.

  • Проверка в порядке является гибкой и не требует проверки каждого отдельного взаимодействия.

  • Пользовательские сопоставления аргументов используют совпадения hamcrest, поэтому вы можете использовать существующие сочетания hamcrest. (EasyMock также может интегрироваться с Hamcrest, хотя он не является частью EasyMock, а Hamcrest. См. Документацию Hamcrest).

PowerMock - это расширение других систем Mocking, таких как Mockito или EasyMock, которые поставляются с более мощными возможностями. Это означает, что вы можете комбинировать Mockito/EasyMock и PowerMock с тем же unit test.

Я лично использую Mockito для модульного тестирования большой части моего кода и PowerMock только в коде, который нуждается в дополнительных функциях в качестве тестирования статических методов.

Ответ 3

Если вы контролируете свой дизайн, и вы должны быть в основном в порядке с Mockito. Например, PowerMock позволяет вам издеваться над частным членом, который выглядит круто, но не является необходимым, если вы реорганизуете этот частный член в параметр, предоставляемый посредством инъекции зависимостей.