我有一个 SpringBoot应用程序,我有一个带
的配置包@Configuration
@EnableJpaAuditing
public class PersistenceConfig {
}
但 PersistenceConfig 不会在 PersonRepositoryTest
中被选中@RunWith( SpringRunner.class )
@DataJpaTest
public class PersonRepositoryTest {
// Tests ...
}
但是,如果我从@DataJpaTest to @SpringBootTest
更改,PersonRepositoryTest将选择配置。
我的包结构是
- main
- java
- config
PersistenceConfig.java
- domain
Person.java
- persistence
PersonRepository.java
Application.java // @SpringBootApplication
- test
- java
- persistence
PersonRepositoryTest.java
Testing improvements in Spring Boot 1.4建议使用@DataJpaTest
测试持久层观察: 在Test类上执行这两个注释仍然不会导入配置 @SpringBootTest @DataJpaTest
问题1: 使用@DataJpaTest测试持久层时 我如何正确(Spring Boot中的最佳实践方式)将配置包导入我的测试中?
问题2: 使用@SpringBootTest是否可以接受?我知道@DataJpaTest也是一个元注释,我的数据库有合理的自动配置,包括事务管理。但如果我不需要它呢?
答案 0 :(得分:11)
解决方案是使用@Import
将配置导入@DataJpaTest
完成的配置。这是我对@Import
的理解。
@RunWith(SpringRunner.class)
@DataJpaTest
@Import(AuditConfiguration.class)
public class AuditTest {
}
使用AuditConfiguration
启用审核
@Configuration
@EnableJpaAuditing
public class AuditConfiguration {
}
答案 1 :(得分:5)
你可以试试这个:
使用PersistenceConfig
注释@ComponentScan
以在Spring中启用组件扫描。
@Configuration
@EnableJpaAuditing
@ComponentScan(basePackages = "com.yourbasepackage")
public class PersistenceConfig {
}
如果没有进一步配置,@ComponentScan
将默认扫描与PersistenceConfig
类相同的包。
添加@Context-Configuration
注释以告诉它从PersistenceConfig.class加载其配置。
@RunWith( SpringRunner.class )
@DataJpaTest
@ContextConfiguration(classes=PersistenceConfig.class)
public class PersonRepositoryTest {
// Tests ...
}
答案 2 :(得分:0)
在@georges van post之后,我发现所有配置类也可以通过在测试中添加一行来获取:
@RunWith( SpringRunner.class )
@DataJpaTest
@ComponentScan(basePackages = "com.basepackage.config")
public class PersonRepositoryTest {
// Tests ...
}
如果有人只想要一个特定的配置类,您可以这样做:
@RunWith( SpringRunner.class )
@DataJpaTest
@ContextConfiguration(classes=MyConfig.class)
public class PersonRepositoryTest {
// Tests ...
}
或多个类:
@ContextConfiguration(classes={MyConfig1.class, MyConfig2.class})