#java #spring #spring-boot #kotlin #junit
#java #весна #spring-boot #kotlin #junit
Вопрос:
Итак, мой тестовый класс не может найти компоненты, если я не упоминаю тест приложения в аннотациях тестового класса
@RunWith(SpringJUnit4ClassRunner::class)
@SpringBootTest(classes=[MySpringApplication::class])
@WebAppConfiguration
class MyFooIT{...}
Я видел (и писал) другие тесты (в других проектах и в этом), где мне не нужно было явно упоминать класс.
Я не уверен, почему это происходит, и я подозреваю, что незнание может привести к тому, что я столкнусь с проблемами позже.
Когда вам нужно предоставить классу @SpringBootTest
аннотацию, а когда нет?
Комментарии:
1. Отличается ли пакет этого интеграционного теста от пакета, в котором находится MySpringApplication? Это произойдет, когда логика сканирования spring classpath не сможет автоматически найти класс.
Ответ №1:
Возможно, вам придется указать класс приложения, который вы хотите использовать в @SpringBootTest
:
- Когда ваш тестовый класс находится вне корневого пакета вашего класса приложения (подробнее о структуре здесь)
- Когда у вас есть более одного класса приложения в пакете вашего основного приложения. Обычно это происходит, когда у вас есть зависимости, использующие один и тот же пакет (модуль A используется
com.example
как корневой пакет, а модуль B зависит от модуля A и также используетсяcom.example
как корневой пакет)
Вы можете проверить, находится ли ваш MyFooIT
класс в иерархии корневого пакета (содержащего MySpringApplication
) или у вас есть несколько классов приложений в одном корневом пакете.