带有自动装配的弹簧启动现场注入在JUnit测试中不起作用

问题描述 投票:2回答:2

我想在测试中注入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 ...必须在bean中定义自动成员。但据我所知,它是在带有@Component注释的bean中定义的。所有其他bean接线似乎都可以,因为Spring启动应用程序可以启动(当我注释掉测试类时)。

java spring-boot junit dependency-injection autowired
2个回答
4
投票

@SpringBootTest是相当重量级的,并且所有意图和目的将加载你的整个应用程序,https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-testing.html#boot-features-testing-spring-boot-applications,它是相当重量级和显着影响测试时间。根据您要测试的内容,您可能需要查看


3
投票

我换了

@RunWith(SpringJUnit4ClassRunner.class)

@SpringBootTest
@RunWith(SpringRunner.class)

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

© www.soinside.com 2019 - 2024. All rights reserved.