java - Junit5 Spring Boot Autowire ComponentScan 不工作

标签 java spring junit5 spring-boot-test

我的问题:如果我的测试引用了 @SpringBootTest 中列出的类中的 @Bean 声明,则 Autowiring 有效。如果它自动引用由 @SpringBootTest 中列出的类 @ComponentScan 指定的类,则 Autowiring 失败。在测试之外,我的应用程序启动时没有 Autowiring 或组件扫描问题,我可以确认我想在测试中加载的服务在非测试中运行良好。我很沮丧。我坏了,还是 Spring Boot 2 上的 Junit5 功能?

我的测试:

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

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

我的配置:

@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

最佳答案

我遇到了同样的问题,尽管测试开始了,但 Autowiring 无法正常工作,问题是我仍在使用旧的 junit4 @Test 注释。 确保您的测试方法使用来自 juni5 包 org.junit.jupiter.api.Test 的 @Test 注释。

关于java - Junit5 Spring Boot Autowire ComponentScan 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52406189/

相关文章:

java - 在 java 构造期间将 `this` 作为参数传递

mysql - JPA 非实体,选择数据库结果到 List<object[]>

java - Spring Rest 返回 multipart/form-data 和 application/json 内容类型

java - Spring CrudRepository - 在集合中查找忽略大小写

Java JUnit 5 注释差异

gradle - 多项目构建:为每个子项目执行功能

java - 由于 setSelection(),EditText 中的文本删除停止

java - 自定义功能接口(interface)作为方法参数

junit - 在 Kotlin 和 JUnit 5 中重复 @ExtendWith

java - 如何在调用 Nominatim Webservice 的 Java 应用程序中处理外部地址