По stackoverflow есть ряд аналогичных вопросов, но я не нашел ни одного из них.
В моем интеграционном тесте с загрузкой Spring 2.0.2.RELEASE я создал отдельный класс @Configuration для теста, в котором я определил bean com.example.MyService
. Этот bean-компонент используется каким-то другим bean-компонентом в com.example.OtherBean
.
Вот код:
Тестовый класс:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {MyIntegrationTestConfig.class},
webEnvironment = SpringBootTest.WebEnvironment.MOCK)
public class MyService1Test extends MyAbstractServiceIntegrationTest {
@Test
public void someTest() {}
}
Общая аннотация для настройки и разборки:
public class MyAbstractServiceIntegrationTest{
@Before
public void setUp(){}
@After
public void tearDown()
}
MyIntegrationTestConfig в src / test, который будет использоваться вместо конфигураций в src / main:
@Configuration
@ComponentScan({"com.example"})
public class MyIntegrationTestConfig {
@Bean
public MyService myService() {
return null;
}
}
MyService
bean может иметь значение null для целей тестирования.
Когда я запускаю тест, я получаю следующую ошибку:
Нет подходящего bean-компонента типа com.example.MyService: ожидается как минимум 1 bean-компонент, который квалифицируется как кандидат autowire. Аннотации зависимостей: {}
Я даже пробовал добавить этот внутренний класс в MyServic1Test. Все еще не помогло:
@TestConfiguration
static class MyServic1TestContextConfiguration {
@Bean(name = "MyService")
public MyService myService() {
return null;
}
}
Есть идеи, что я здесь сделал не так? Или я что-то упустил?
Я подозреваю, что Spring сначала пытается создать bean-компонент / autowire в папке src / main, прежде чем он даже создаст bean-компонент MyService, определенный в папке src / test. Может ли быть так? Или существует другой контекст (например, тестовый контекст), в котором находится компонент MyService, в то время как другие компоненты находятся в другом контексте и не могут найти MyService.
Дополнительный вопрос: для интеграционного теста можно использовать webEnvironment = SpringBootTest.WebEnvironment.MOCK, верно?
new MyService()
вместоnull
, чтобы проверить, сохраняется ли ошибка. - person NiVeR   schedule 30.05.2018