Где должны храниться интеграционные тесты при использовании maven-failsafe-plugin?

Нужно ли размещать свои интеграционные тесты под src/test с остальными моими модульными тестами и просто различать их по такой схеме, как *Integr*Test, *ITTestили они могут быть в src/it (как в случае разработки плагинов Maven и использования maven-invoker-plugin)?

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

2 ответа

Решение

Первый плагин maven-fails-plugin запускается по умолчанию в другой фазе жизненного цикла (интеграция-тест), как это делает maven-surefire-плагин (тест). Кроме того, вы можете настроить запуск maven-failsafe-plugin verify цель на post-integration-test этап тестирования, если вы хотите проверить, не прошли ли интеграционные тесты. Это может быть свободно настроено.

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

Кроме того, maven-surefire-plugin уже настроен в жизненном цикле по умолчанию. Да, дополнительная цель была бы идеей, но это могло бы запутать пользователя в использовании одних и тех же плагинов в разных отношениях. Таким образом, разделение проблем здесь важно. Помимо целых конфигураций по умолчанию... Эти плагины имеют большую базу кода, но есть различия...

То, что уже было упомянуто Тунаки, это pre-integration-test, для настройки таких вещей, как серверы и т. д. integration-test и такие вещи, как выключение служб / серверов в post-integration-test фаза. Это никогда не произойдет в модульных тестах.

Использование отдельного модуля обычно упрощает настройку ИТ, что означает наличие других зависимостей (classpath), чем для модульных тестов. Например, такие вещи, как Arquillian.org, который никогда не используется в модульных тестах. Это не может быть обработано в одном модуле... также хорошо, что здесь есть разделение проблем..

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

Так что насчет макета папки? В модуле тестирования интеграции вы можете просто использовать src/test/java папка, что означает, что вам не нужна дополнительная конфигурация и т. д. (например, через build-helper-maven-plugin и т. д.), что упрощает ее и следует в большей степени соглашению с парадигмой конфигурации.

И не забывайте, что вы можете лучше контролировать то, что работает в вашей сборке (CI)..

И еще один важный совет. Обычно интеграционные тесты часто связаны с инфраструктурой, поэтому иногда полезно игнорировать сбои, которые можно просто обработать с помощью check цель maven-failsafe-плагина....

Пример для модуля ИТ можно найти здесь.

Вы правы в том, что src/it предназначен для тестирования интеграции плагинов. Это упоминается в стандартном макете каталога.

maven-failsafe-plugin по умолчанию будет искать ваши интеграционные тесты внутри ${project.build.testSourceDirectory}, который совпадает с maven-surefire-plugin для юнит-тестов. По умолчанию это соответствует src/test/java, Интеграционные тесты различаются благодаря следующему соглашению об именах:

<includes>
  <include>**/IT*.java</include>
  <include>**/*IT.java</include>
  <include>**/*ITCase.java</include>
</includes>

который отличается от соглашения об именах для юнит-тестов:

<includes>
  <include>**/Test*.java</include>
  <include>**/*Test.java</include>
  <include>**/*TestCase.java</include>
</includes>

Таким образом, в то время как они будут находиться в той же папке источника (src/test/java), разница в именах четко их различает. Кроме того, это настройка по умолчанию, поэтому дополнительная настройка не требуется.

Тем не менее, вы можете иметь другие варианты:

  • Поместите интеграционные тесты в другую исходную папку. Это потребует некоторой настройки, чтобы она работала: вам нужно будет использовать build-helper-maven-plugin:add-test-source цель добавить пользовательскую папку в качестве папки исходного кода.
  • Используйте другой модуль (если у вас есть многомодульный проект Maven), который будет содержать только интеграционные тесты.
Другие вопросы по тегам