如何解决@DataJpaTest的集成测试
我的项目中有此测试:
File Original Author First Added Commit
----------------------------------------------------------------
a.yaml tom 01/01/2020 1a12121
b.yaml Felix 05/01/2020 ad12257
[...]
local-configuration.properties:
@DataJpaTest
@SpringBoottest
@TestPropertySource(locations = "classpath:local-configuration.properties")
public class CanPixaRepositoryTest {
@Autowired
private CanPixaRepository canPixaRepository;
public void setUp() throws Exception {
}
@Test
public void testAll() {
canPixaRepository].getAvui("fqs");
}
}
但是当我运行测试时,canPixaRepositoryRepository为空
解决方法
对于Spring引导应用程序,最简单的方法是如果使用JPA和Spring Data JPA,则将@DataJpaTest与H2一起使用来测试您的存储库。
- 将h2依赖项添加到您的测试范围。 Spring Boot将自动配置它,并在测试阶段使用它来替换运行时DataSource。
- 用
@DataJpaTest
注释测试。然后,Spring应用程序上下文中将提供EntityManager
,您的存储库和用于测试的TestEntityManager
。
(Spring 5 / Spring Boot 2添加了Junit 5支持,如果您使用的是Junit 5集成,则不需要@Runwith
或@Extendwith
,在Spring之前,DataJpaTest本身是一个元注释。 2.4,要启用Junit5,您必须从spring-boot-test中排除JUnit 4并手动添加JUnit5。在即将到来的Spring Boot 2.4中,JUnit 5是默认的测试运行器。
@SpringBootTest
批注用于设置整个应用程序上下文,而@DataJpaTest
将设置应用程序上下文,以便您可以测试与jpa相关的代码,为此它将设置应用程序上下文的一部分特定的用例。因此,无需将@SpringBootTest
的注解与@DataJpaTest
一起使用,就可以像这样使用它:
@ExtendWith(SpringExtension.class)
@DataJpaTest
@TestPropertySource(locations = "classpath:local-configuration.properties")
public class CanPixaRepositoryTest {
@Autowired
private CanPixaRepository canPixaRepository;
public void setUp() throws Exception {
}
@Test
public void testAll() {
canPixaRepository.getAvui("fqs");
}
}
从SpringBoot 2.1开始,您不必提供@ExtendWith
注释就可以告诉Junit启用spring支持,因为已经提供了@SpringBootTest
和@DataJpaTest
之类的注释。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。