@DataJpaTest未加载必需的类

时间:2018-05-01 19:04:48

标签: unit-testing spring-boot spring-data-jpa

我试图使用以下方法设置一些Spring Boot JPA测试:

package biz.ianw.coindatabase.test;

@RunWith(SpringRunner.class)
@DataJpaTest     
public class DbTests {
  @Test
  public void test1() { ... }
}

我有一个服务类:

package biz.ianw.coindatabase.database;

//@Service
@Repository
@Transactional(readOnly=false)
public class CoinDbService { ... }

和申请表:

package biz.ianw.coindatabase;

@SpringBootApplication
@Slf4j
@Configuration
@EnableEncryptableProperties
public class Main {
  @Autowired
  CoinDbService dbService;
... }

开始测试会出错:

  

biz.ianw.coindatabase.Main中的字段dbService需要一个类型为' biz.ianw.coindatabase.database.CoinDbService'的bean。无法找到。

我认为这与启动时加载的bean @DataJpaTest类型有关:

  如果要测试JPA应用程序,可以使用

@DataJpaTest。通过   默认情况下,它将配置内存中的嵌入式数据库,扫描   @Entity类并配置Spring Data JPA存储库。定期   @Component bean不会加载到ApplicationContext中。

我不太确定为什么@Service类应被视为JPA测试不需要,但我试图通过将其注释为@Repository来强制解决此问题,但无济于事。

我可以使用@Import(...)手动加载该类,但它似乎有点诡异。有没有更好的方法告诉DataJpaTest我需要测试什么?

1 个答案:

答案 0 :(得分:0)

我引用了DataJpaTest documentation,您可以在其中找到问题的答案。

  

可以与之结合使用的注释   @RunWith(SpringRunner.class)进行典型的JPA测试。可以用的时候   测试只关注JPA组件。

     

使用此注释将禁用完全自动配置   仅应用与JPA测试相关的配置。

     

默认情况下,使用@DataJpaTest注释的测试将使用嵌入式   内存数据库(替换任何显式或通常自动配置   数据源)。 @AutoConfigureTestDatabase注释可用于   覆盖这些设置。

     

如果您要加载完整的应用程序配置,但是   使用嵌入式数据库,你应该考虑@SpringBootTest的组合   使用@AutoConfigureTestDatabase而不是此注释。