Я очень новичок в насмешливой структуре, и моя работа требует насмешливой структуры для завершения модульного тестирования. В текущей базе кода, которую я видел выше, три фреймворка используются в разных местах для модульного тестирования. Итак, к чему я должен идти в вышеуказанных трех рамках?
В чем разница между платформами 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 позволяет вам издеваться над частным членом, который выглядит круто, но не является необходимым, если вы реорганизуете этот частный член в параметр, предоставляемый посредством инъекции зависимостей.