Gradle build -> как «улучшить» приложение jar с помощью тестовых заглушек - PullRequest
0 голосов
/ 10 февраля 2020

У меня есть мультимодульная сборка приложения с некоторыми принципами «чистой архитектуры». Для простоты предположим, что у него есть эти модули (число в скобках говорит о том, от каких модулей это зависит):

  1. домен
  2. service-api (1)
  3. web / rest (1,2)
  4. service-impl (1,2)

, поэтому фактическая логика c находится в модулях web / rest и service-impl. Каждый из модулей проходит модульное тестирование на абстракциях, и теперь я хотел бы упаковать приложение и провести интеграционное тестирование

Итак, я создаю 5-й модуль «приложение», и это зависит от реальных реализаций. 3 и 4. Итак, я упаковываю их в «uber-jar» и развертываю его на tomcat (или запускаю встроенный tomcat - это не главное).

Теперь я хотел бы запустить некоторые интеграционные тесты через вызовы rest -> но, конечно, у меня есть некоторые внешние зависимости (вызовы rest внешних служб и т. д. c ...).

Поэтому я бы хотел использовать заглушки интерфейса, которые будут читать предопределенные ответы из ресурсов classpath. Я могу определить некоторые профили Spring и аннотировать свои bean-компоненты с помощью «интеграционных тестов» или «! Интеграционных тестов», но я не хочу, чтобы какие-либо производственные классы были аннотированы чем-либо, содержащим слово «тест», или имели некоторые тестирование заглушек в производственных ресурсах classpath =)

Итак, мне пришла в голову идея определить эти заглушки как @Primary и поместить их вместе с ресурсами тестирования в src / test / .., а затем «переупаковать» мой jar (например, добавление классов и ресурсов в prod jar) в жизненном цикле сборки перед запуском tomcat - и пусть Spring разрешит bean-компоненты во время выполнения.

Итак, вопрос в том, как реализовать эту «перепаковку jar» с помощью gradle. ?

Кроме того, если вы хотите назвать меня сумасшедшим, и у вас есть лучший способ решить проблему, ваша помощь будет принята с благодарностью!

...