Junit5 Spring Boot Autowire ComponentScan не работает - PullRequest
0 голосов
/ 19 сентября 2018

Моя проблема: если мой тест ссылается на объявление @Bean в классе, указанном в @SpringBootTest, работает autowire.Если он ссылается на класс, автоматически @ComponentScan определенный классом, перечисленным в @SpringBootTest, autowire завершается ошибкой.Вне тестирования мое приложение запускается без проблем с автопроводом или проверкой компонентов, и я могу подтвердить, что служба, которую я хочу загрузить в моем тесте, работает нормально из-за отсутствия тестирования.Я чертовски разочарован.Я сломан или функционал Junit5 в Spring Boot 2?

Мой тест:

@ExtendWith(SpringExtension.class)
@SpringBootTest (classes=MyConfig.class)
public class MyTest {
    // fails to autowire
    @Autowired
    private MyService _mySvc ;

    // succeeds!
    @Autowired @Qualifier ( "wtf" )
    private String _wtf ;

MyConfig:

@EnableWebMvc
@SpringBootApplication ( scanBasePackages = "my.packaging" )
@Configuration
public class MyConfig {

    @Bean
    public String wtf ( ) { return "W T F???" ; }

    // No @Bean for MyService because component scan is nicer in the non-test world

Ответы [ 2 ]

0 голосов
/ 16 декабря 2018

У меня была та же проблема с неработающей автопроводкой, хотя тест начинался, и проблема была в том, что я все еще использовал старую аннотацию junit4 @Test.Убедитесь, что ваш метод тестирования помечен @Test из пакета juni5 org.junit.jupiter.api.Test.

0 голосов
/ 19 сентября 2018

Я думаю, потому что вы аннотировали так:

@SpringBootTest (classes=MyConfig.class)

Spring будет искать только в MyConfig.class соответствующие бины и не сможет найти один для MyService, однако я предполагаю, чтоSpring будет проверять все пакеты на наличие bean-компонента, когда приложение будет работать нормально.Вот почему он отлично работает в non-test.

...