Когда мне нужно упомянуть класс приложения в аннотации `@SpringBootTest`?

#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 :

  1. Когда ваш тестовый класс находится вне корневого пакета вашего класса приложения (подробнее о структуре здесь)
  2. Когда у вас есть более одного класса приложения в пакете вашего основного приложения. Обычно это происходит, когда у вас есть зависимости, использующие один и тот же пакет (модуль A используется com.example как корневой пакет, а модуль B зависит от модуля A и также используется com.example как корневой пакет)

Вы можете проверить, находится ли ваш MyFooIT класс в иерархии корневого пакета (содержащего MySpringApplication ) или у вас есть несколько классов приложений в одном корневом пакете.