2010-06-05 10 views

ответ

14

Три недостатки:

  • Вы должны использовать агент Java, чтобы сделать байткодом приборов.
  • Вы не можете использовать подписанный файл junit.jar, поставляемый с Eclipse.
  • Вы должны изучить макет API. (В отличие от объекта-заглушки)

Вы всегда можете обсудить, хорошо ли быть в состоянии высмеять окончательный класс, например, JMockit. Если это устаревший код, рефакторинг обычно является лучшей альтернативой.

С помощью IDE, таких как Eclipse, я нахожусь с помощью инструментальной поддержки для создания заглушек внутри тестового класса чаще, чем издевательства (JMockit, Mockito и т. Д.) В последнее время. Преимущество такого подхода заключается в том, что он очень прост. Это особенно приятно, когда у вас есть команда со многими разработчиками, и некоторые из них не любят тестирование и мало мотивируют изучать насмешливую структуру. Кроме того, в реализациях заглушек нет ограничений на фреймворк!

Если вы открыты для гася в качестве альтернативы, вы должны проверить блог Роберта С. Мартина о насмешливых и гася here и here

Else, это выглядит очень хорошо! Хотя у меня есть только опыт работы с JMock, EasyMock и базовые знания с JMockit.

+0

Да, я тоже спрашиваю себя, как далеко я хочу смеяться. Мой собственный код использует Dependency Injection повсюду, поэтому насмешка не является сложной задачей (хотя я не всегда использую интерфейсы для всего, что связано с дополнительным усилием обслуживания + накладными расходами при использовании с GWTRPC). Когда вы говорите, что используете поддержку инструмента для создания заглушек в Eclipse - какие инструменты вы имеете в виду? –

+0

Просто базовая поддержка Java в Eclipse. Например, если вы создаете частный или анонимный класс, который реализует интерфейс, который вы хотите заглушить, то Eclipse может создать реализацию скелета. Просто нажмите + 1 после того, как вы выбрали класс. – Espen

+0

А, ок - я подумал, может быть, есть какой-то инструмент, который сохраняет синхронизацию, когда код меняется или что-то в этом роде. –

15

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

тесты очень хрупкий, так как деталь реализации содержащаяся в частных методах испытывается (так что, если я меняю как класса делает что-то это может привести к поломке испытания, даже если какого класса это не влияет).

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

+0

Я не понимаю этот комментарий. Вы говорите, что тесты стали хрупкими после использования JMockit b/c. Детали реализации в частных методах были ** проверены **. Но, несомненно, способность издеваться над такими частными методами помогла бы вам смягчить проблему, фактически ** издеваясь над этими частными методами, а не усугублять ее ** тестированием ** частных методов? Разве JMockit не работал в пользу вас, делая ваши тесты лучше, чем без него? Просто любопытно. – mystarrocks

+1

Я думаю, что тесты были хрупкими, потому что, если кто-то реорганизовывает класс (например, переименовывает/разбивает/комбинирует некоторые внутренние методы или даже полностью меняет, как класс работает внутри, не изменяя его публичный API), то тесты, которые выкалывают внутри класса тестирование его частных методов будет нарушено. Я не думаю, что единичный тест должен заботиться о том, как класс выполняет свою работу, он должен только заботиться о том, выполнено ли задание правильно или нет. Разве это ясно? – codebox

+0

А, да, да. Похоже, что [this] (http://stackoverflow.com/a/11834082/934307) комментарий разделяет те же чувства, что и ваши. Ура! – mystarrocks

 Смежные вопросы

  • Нет связанных вопросов^_^