В тестах TDD должны быть полезными, прямолинейными, быстрыми и держать обслуживание на минимальном уровне. В противном случае разработчики будут раздражены и постараются избежать тестов.
Поэтому я рекомендую не быть строгим, если это чистый юнит-тест или немного интеграции. Выберите область тестирования, которая лучше всего подходит для вашей ситуации, и используйте технические функции, которые подходят для этой области.
Не используйте DI, если вы проводите «настоящий» юнит-тест, тестируя автономный метод насвой. Эти тесты имеют смысл, если метод делает что-то значимое, например, алгоритм, расчет, принятие решения. Поддельные источники данных - это отличный способ получить предсказуемые входные значения. Недостатком @SpringBootTest, который вам на самом деле не нужен, является адское время запуска (зависит от размера проекта), которое действительно раздражает.
Используйте CDI, если метод вызывает функциональность зависимости. 1) Установка myService.service2 = new Service2()
вручную оставляет вам Service2, который также не обрабатывается DI-контейнером, который может потребовать от вас установить еще несколько зависимостей ... 2) CDI в тестировании - это бриз с Spring - так зачем вамРаздувать ваши тесты с установочным кодом? 3) DI включает прокси, которые иногда ведут себя немного иначе, чем простые экземпляры.
Используйте @ContextConfiguration(classes = {ServiceTest.class})
для получения CDI с более быстрым запуском по сравнению с @ SpringBootTest.
Не тестируйте склеивание кода сЮниттесты, поскольку они не имеют внутренней ценности. Эти тесты трудны для понимания (кто любит документировать тесты), потребуют много насмешек и часто будут подвергаться изменениям. Протестируйте такой код в сочетании с другими методами / классами, даже если это означает, что у вас есть только интеграционные тесты для этих частей кода.