使用autowire的Spring Boot字段注入在JUnit测试中不起作用
我想在测试中注入DeMorgenArticleScraper。
@RunWith(SpringJUnit4ClassRunner.class)public class DeMorgenArticleScraperTest {
@Autowired
private DeMorgenArticleScraper deMorgenArticleScraper;
...
}
DeMorgenArticleScraper组件本身具有一些配置,但是IDE /编译器没有抱怨它们。
@Componentpublic 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中定义的。当Spring
Boot应用程序可以启动时(当我注释掉测试类时),所有其他bean连接似乎都可以。
回答:
@SpringBootTest
是相当重量级的,并且出于所有目的和目的将加载整个应用程序,https://docs.spring.io/spring-
boot/docs/current/reference/html/boot-features-testing.html#boot-features-
testing-spring-boot-applications,它相当重,并且会极大地影响测试时间。根据您要测试的内容,您可能需要调查一下
- 切片试验,例如
@JsonTest
,@DataJpaTest
,@WebMvcTest
等,https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-testing.html#boot-features-testing-spring-boot-applications- testing-autoconfigured-tests。这些测试的好处不仅在于它们不会加载所有内容,因此速度更快,而且还会尝试寻找相关的配置。 - 简而言之,
@ContextConfiguration
并指向相关@Configuration
的,以加载测试所需的bean https://docs.spring.io/spring/docs/current/spring-framework-reference/testing.html#contextconfiguration
以上是 使用autowire的Spring Boot字段注入在JUnit测试中不起作用 的全部内容, 来源链接: utcz.com/qa/413449.html