如何在SpringBootTest中的@DataJpaTest中导入配置类?

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)


geo*_*van 5

您可以尝试以下操作:注释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)