使用autowire的Spring Boot字段注入在JUnit测试中不起作用

pro*_*kpa 2 java junit dependency-injection autowired spring-boot

我想在测试中注入DeMorgenArticleScraper。

@RunWith(SpringJUnit4ClassRunner.class)
public class DeMorgenArticleScraperTest {

    @Autowired
    private DeMorgenArticleScraper deMorgenArticleScraper;

    ...
}
Run Code Online (Sandbox Code Playgroud)

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);
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

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

IDE已经警告过我,找不到bean ...必须在bean中定义自动装配的成员。但据我所知,它是在具有@Component批注的bean中定义的。当Spring Boot应用程序可以启动时(当我注释掉测试类时),所有其他bean连接似乎都可以。

Dar*_*the 6

@SpringBootTest是相当重量级的,并且出于所有目的和目的将加载整个应用程序,https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-testing.html#boot-features- testing-spring-boot-applications,它相当重,并且会极大地影响测试时间。根据您要测试的内容,您可能需要调查一下


pro*_*kpa 5

我更换了

@RunWith(SpringJUnit4ClassRunner.class)
Run Code Online (Sandbox Code Playgroud)

@SpringBootTest
@RunWith(SpringRunner.class)
Run Code Online (Sandbox Code Playgroud)

这似乎运行良好:我看到Spring启动启动并加载bean。我将暂时开放这个问题以寻求更好的建议。