问题描述
我的项目中有此测试:
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
之类的注释。