Каков рекомендуемый способ запуска теста весенней загрузки, когда в контексте настроен только один испытуемый объект.
Если я аннотирую тест с помощью
@RunWith(SpringRunner.class)
@SpringBootTest(properties = "spring.profiles.active=test")
@ContextConfiguration(classes = MyTestBean.class)
Тогда это похоже на работу - тест проходит, контекст запускается быстро и, кажется, содержит только тот бин, который я хочу. Однако это похоже на неправильное использование аннотации @ContextConfiguration(classes = MyTestBean.class)
. Если я правильно понимаю, класс, на который я ссылаюсь, должен быть классом Configuration
, а не обычным компонентом службы поддержки Spring или компонентом, например.
Это верно? Или это действительно верный способ достижения этой цели? Я знаю, что есть более сложные примеры, такие как org.springframework.boot.test.autoconfigure.json.JsonTest
, в которых для управления контекстом используется @TypeExcludeFilters(JsonExcludeFilter.class)
, но для моего варианта использования это кажется излишним. Я просто хочу контекст с моим единственным бобом.
Разъяснение
Я знаю, что я могу просто создать один bean-компонент, который я тестирую, как POJO без весеннего контекстного теста, и удалить три аннотации, описанные выше. Но в моем конкретном случае использования я на самом деле полагаюсь на некоторые настройки, применяемые к контексту с помощью настроек в файле application-test.properties
- вот почему я сделал этот тест Spring Boot с набором профилей. С моей точки зрения, это не простой модульный тест отдельного класса в изоляции конфигурации контекста пружины - тест зависит от определенной применяемой конфигурации (которая в настоящее время обеспечивается свойствами приложения весенней загрузки). Я действительно могу просто протестировать компоненты как POJO, создав новый экземпляр вне контекста Spring. Я использую конструкторское внедрение, упрощающее предоставление необходимых зависимостей, но тест опирается на такие вещи, как уровень журнала (тест фактически делает утверждения для определенных создаваемых журналов), который требует, чтобы уровень журнала был установлен правильно (что в настоящее время выполняется с помощью logging.level.com.example=DEBUG
в файле свойств, который устанавливает контекст пружины).