java - 使用 Autowiring 的 Spring Boot 字段注入(inject)在 JUnit 测试中不起作用

标签 java spring-boot junit dependency-injection autowired

我想在测试中注入(inject) DeMorgenArticleScraper。

@RunWith(SpringJUnit4ClassRunner.class)
public class DeMorgenArticleScraperTest {

    @Autowired
    private DeMorgenArticleScraper deMorgenArticleScraper;

    ...
}

DeMorgenArticleScraper 组件自己进行了一些配置,但 IDE/编译器并没有提示它们。
@Component
public class DeMorgenArticleScraper extends NewsPaperArticleScraper {

    @Autowired
    public DeMorgenArticleScraper(
            @Qualifier("deMorgenSelectorContainer") SelectorContainer selector,
            GenericArticleScraper genericArticleScraper,
            @Qualifier("deMorgenCompany") Company company) {
        super(selector, genericArticleScraper, company);
    }

    ...
}

使用@Qualifier 注释的构造函数参数在带有@Bean 的Config.class 中定义。类本身有@Configuration。我认为问题不在这里。

IDE 已经警告我,没有找到 bean...autowired 成员必须在 bean 中定义。但据我所知,它是在带有 @Component 注释的 bean 中定义的。所有其他 bean 接线似乎都可以,因为 Spring 引导应用程序可以启动(当我注释掉测试类时)。

最佳答案

我换了

@RunWith(SpringJUnit4ClassRunner.class)


@SpringBootTest
@RunWith(SpringRunner.class)

这似乎工作正常:我看到 Spring 启动启动并加载 bean。我会暂时保留这个问题以获得更好的建议。

关于java - 使用 Autowiring 的 Spring Boot 字段注入(inject)在 JUnit 测试中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44787722/

相关文章:

java - 为什么 chrome 驱动程序在 @Before 中不起作用?

java - 在Java中的非静态类中声明静态变量

java - 如何创建一个映射,其中多个值映射到 List<Map<String,Object> 中的同一键?

spring-boot - @EnableMongoAuditing 和@CreatedDate 审计在 Spring Boot 2.4.3 中不起作用

java - 一对一和多对一实体关系之间是否存在实现差异?

java - 为排序的字符串列表创建测试用例

java - JUnit 测试 - 错误的参数数量和@Parameter 字段

java - JPanel 设计问题

java - 将数组的索引 0 留空以对应程序前端的实际值是否合适?

java - 在单元测试中模拟/ stub RuntimeException