Весенний тест загрузки - нет подходящего компонента типа com.example.MyService - PullRequest
0 голосов
/ 30 мая 2018

Есть несколько похожих вопросов по stackoverflow, но я не нашел ни одного в моем случае.

В моем интеграционном тесте с загрузкой Spring 2.0.2.RELEASE я создалотдельный класс @Configuration для теста, в котором я определил bean com.example.MyService.Этот бин используется другим бином в 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: * bean-компонент

@Configuration
@ComponentScan({"com.example"})
public class MyIntegrationTestConfig {
   @Bean
   public MyService myService() {
      return null;
   }
}

MyService может быть пустым для целей тестирования.

Когда я запускаю тест, я продолжаю получатьследующая ошибка:

Нет подходящего компонента типа com.example.MyService: ожидается как минимум 1 компонент, который считается кандидатом autowire.Аннотации зависимостей: {}

Я даже пытался добавить этот внутренний класс в MyServic1Test.Всё равно не помогло:

@TestConfiguration
static class MyServic1TestContextConfiguration {

    @Bean(name = "MyService")
    public MyService myService() {
        return null;
    }
}

Есть идеи, что я тут не так сделал?Или я что-то пропустил?

Я подозреваю, что Spring пытается создать bean-компоненты / autowire в папке src / main прежде, чем он даже создаст bean-компонент MyService, определенный в папке src / test.Может ли это быть так?Или существует другой контекст (например, тестовый контекст), в котором находится bean-компонент MyService, в то время как другие bean-компоненты живут в другом контексте и не могут найти MyService.

Дополнительный вопрос: для тестирования интеграции можно использоватьиспользовать webEnvironment = SpringBootTest.WebEnvironment.MOCK, правильно?

1 Ответ

0 голосов
/ 30 мая 2018

Проблема в том, как вы инициализируете бин.Значение null является причиной возникновения проблемы.Это как если бы вы не были в действительности объявив какой-либо экземпляр этого объекта.Чтобы заставить его работать, объявите действительный экземпляр службы new MyService().

...