Почему SpringBootTests не вызывают основной метод класса SpringBootApplication - PullRequest
3 голосов
/ 28 сентября 2019

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

1 Ответ

3 голосов
/ 28 сентября 2019

Тест весенней загрузки не требует вызова SpringBootApplication.main(), потому что он сам сканирует пакеты на наличие конфигураций.Он пытается имитировать процессы, которые используют среду Spring Boot для создания контекста.Другими словами, он сканирует на основе структур пакетов, загружает внешние конфигурации из предопределенных местоположений, при необходимости запускает автоконфигурационные пускатели и так далее.Интересно, что если вы просто поместите @SpringBootTest в свой тестовый класс, процесс сканирования будет выполняться для пакетов в направлении вверх

Пример: для следующей структуры проекта

└── com
    └── example
        └── demo
            ├── config
            │   └── AppConfig.java
            ├── test
            |   └── SpringBootAppTest.java
            └── DemoApplication.java

Spring Boot testбудет искать SpringBootConfiguration в:

  1. com.example.demo.test
  2. com.example.demo
  3. com.example
  4. com

Поэтому, когда он найдет SpringBootApplication (что составляет SpringBootConfiguration), он загружает свой контекст, который сканирует другие конфигурации и компоненты в другом направлении в примере com.example.demo.configuration.Поэтому весь контекст будет загружен.

Если вы, например, переместитесь на SpringBootAppTest до com.example, произойдет сбой (поскольку SpringBootApplication не найден) со следующей ошибкой:

java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...