У меня есть приложение Java SpringBoot, и я хочу запустить интеграционные тесты, поэтому я хочу запускать приложение перед любым тестом. У меня есть bean-компоненты, которые работают, когда я запускаю приложение в обычном режиме, эти beans переопределяют некоторые bean-компоненты по умолчанию, и они работают нормально.
Мои журналы при нормальной работе службы:
Overriding bean definition for bean 'myService' with a different definition: replacing [Generic bean: ...] with [Root bean: myBean]
Но когда я пытаюсь запустить свой интеграционный тест, журналы говорят следующее:
Skipping bean definition for [where is my bean]: a definition for bean 'myService' already exists. This top-level bean definition is considered as an override.
Вот тест, запускающий приложение:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class Test {
@Test
public void contextLoads() {
}
}
Кто-нибудь знает, как настроить переопределение bean-компонентов по умолчанию в моих тестах?
Спасибо




Вы также можете установить переопределение beans для тестов. Вы можете сделать это, создав отдельный класс конфигурации и определив все компоненты там.
@Configuration
public class TestConfig {
@Bean
public <Bean Class Name> <name of bean>()
{
return new <Bean Class Name>();
}
}
Затем в тестовом примере вы можете использовать этот класс конфигурации в качестве конфигурации контекста.
@SpringBootTest
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {TestConfig.class})
Таким образом, все bean-компоненты можно инициализировать и использовать для тестовых случаев в отдельном классе.