2010-08-02 4 views
7

Im развивается с Grails. Поскольку структура будет загружать данные и полностью размыты весной контексте, я считаю, что я пишу много интеграционных тестов для служб. Позвольте мне перефразировать это: я нахожу, что не пишу никаких модульных тестов для сервисов, а только тестов интеграции. Это плохая идея? Единственный недостаток, который я вижу в этом, заключается в том, что мои тесты занимают немного больше времени для запуска.Интеграция против модульного тестирования

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

edit- быть ясным, Im не записывать интеграционные тесты, потому что код настолько сложный, что будут проводиться только тесты интеграции. Я пишу интеграционные тесты, потому что легче протестировать все вместе, так как структура дает вам столько. Я издеваюсь над некоторыми вещами, например, если служба сотрудничает с службой аутентификации acegi, я издеваюсь над этим. Я также издеваюсь в любое время, когда мы взаимодействуем с веб-сервисом, потому что вам нужно пройти тест, который выполняется без специальной настройки.

+4

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

ответ

11

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

0

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

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

2

В общем, важной мерой является охват кода.

In может быть выгодным проводить интеграционные тесты, если глобальный интерфейс более стабилен (менее подвержен изменениям).

0

Вы должны проверить как можно скорее, потому что вы хотите, чтобы ошибки отображались как можно скорее, в идеале, в то время как наш код все еще находится под вашим контролем. Чем позже будет обнаружена ошибка, тем выше будут затраты на исправление.

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

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

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

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