Тест весенней загрузки не требует вызова SpringBootApplication.main()
, потому что он сам сканирует пакеты на наличие конфигураций.Он пытается имитировать процессы, которые используют среду Spring Boot для создания контекста.Другими словами, он сканирует на основе структур пакетов, загружает внешние конфигурации из предопределенных местоположений, при необходимости запускает автоконфигурационные пускатели и так далее.Интересно, что если вы просто поместите @SpringBootTest
в свой тестовый класс, процесс сканирования будет выполняться для пакетов в направлении вверх
Пример: для следующей структуры проекта
└── com
└── example
└── demo
├── config
│ └── AppConfig.java
├── test
| └── SpringBootAppTest.java
└── DemoApplication.java
Spring Boot testбудет искать SpringBootConfiguration
в:
com.example.demo.test
com.example.demo
com.example
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