Dac*_*ein 14 configuration spring unit-testing spring-data-jpa spring-boot
我有一个SpringBoot应用程序,我有一个配置包
@Configuration
@EnableJpaAuditing
public class PersistenceConfig {
}
Run Code Online (Sandbox Code Playgroud)
但PersistenceConfig不会在PersonRepositoryTest中被捕获
@RunWith( SpringRunner.class )
@DataJpaTest
public class PersonRepositoryTest {
// Tests ...
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我改变@DataJpaTest to @SpringBootTest,PersonRepositoryTest将获取配置.
我的包结构是
- main
- java
- config
PersistenceConfig.java
- domain
Person.java
- persistence
PersonRepository.java
Application.java // @SpringBootApplication
- test
- java
- persistence
PersonRepositoryTest.java
Run Code Online (Sandbox Code Playgroud)
Spring Boot 1.4中的测试改进建议使用@DataJpaTest测试持久层
观察: 在Test类上执行两个注释仍然不导入config @SpringBootTest @DataJpaTest
问题1: 使用@DataJpaTest测试持久层时如何正确(Spring Boot中的最佳实践方式)将配置包导入我的测试?
问题2: 使用@SpringBootTest是否可以接受?我知道@DataJpaTest也是一个元注释,我的数据库有合理的自动配置,包括事务管理.但如果我不需要呢?
Syd*_*ney 14
解决方案是使用@Import将配置导入到完成的配置@DataJpaTest.这是我的理解@Import.
@RunWith(SpringRunner.class)
@DataJpaTest
@Import(AuditConfiguration.class)
public class AuditTest {
}
Run Code Online (Sandbox Code Playgroud)
用AuditConfiguration它可以实现审计
@Configuration
@EnableJpaAuditing
public class AuditConfiguration {
}
Run Code Online (Sandbox Code Playgroud)
您可以尝试以下操作:注释PersistenceConfig 以@ComponentScan在Spring中启用组件扫描。
@Configuration
@EnableJpaAuditing
@ComponentScan(basePackages = "com.yourbasepackage")
public class PersistenceConfig {
}
Run Code Online (Sandbox Code Playgroud)
如果没有进一步的配置,@ComponentScan将默认扫描与PersistenceConfig该类相同的软件包。
并添加@Context-Configuration注释,以告知其从PersistenceConfig.class加载其配置。
@RunWith( SpringRunner.class )
@DataJpaTest
@ContextConfiguration(classes=PersistenceConfig.class)
public class PersonRepositoryTest {
// Tests ...
}
Run Code Online (Sandbox Code Playgroud)