应该直接测试Spring Boot应用程序中的存储库吗?

时间:2019-02-26 16:15:44

标签: spring spring-boot integration-testing spring-repositories

不确定是否将其视为“合法问题”或“纯粹基于意见”,但是在Spring Boot应用程序中直接测试存储库是否有“最佳实践”?或者,是否应该将任何集成测试仅针对相关服务?

该问题的原因很简单,就是在大多数情况下,Spring Boot应用程序中的存储库不包含项目生成的代码。充其量,它包含项目定义的方法签名,Spring会为此生成实现(假设正确的命名约定)。

谢谢...

3 个答案:

答案 0 :(得分:4)

如果您可以弄乱它,则应该对其进行测试。这里的混乱机会可能包括:

  • 自定义查询(使用@Query)可能是错误的(可能存在各种逻辑错误或拼写错误,而没有进行编译时检查)
  • 从方法名称派生查询的存储库方法可能不是您想要的。
  • 传入参数后,参数列表上的类型可能与查询中所需的类型不匹配(在编译时不会强制执行此操作)。

在所有这些情况下,您都不在测试Spring Data JPA,而是在测试使用Spring Data JPA实现的功能。

使用现成的方法 的情况,例如findOne,findAll,保存等,不需要指纹的地方,不需要测试。

测试这些东西很容易,最好早发现错误。

答案 1 :(得分:0)

是的,我认为这样做是一个好习惯。您可以使用@DataJpaTest批注,它会在内存数据库中启动。官方文件说:

You can use the @DataJpaTest annotation to test JPA applications. By default, it configures an in-memory embedded database, scans for @Entity classes, and configures Spring Data JPA repositories. Regular @Component beans are not loaded into the ApplicationContext.

链接到文档:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-testing.html

答案 2 :(得分:0)

从这样的想法开始:应该仅在服务内部使用存储库,并使用服务与系统的其他层进行交互,我认为在大多数情况下测试服务就足够了。

我不会测试标准存储库方法,例如findAll或findBy ..,它们已经过测试,目的不是测试JPA,而是测试应用程序。

唯一可以直接测试的存储库方法是带有自定义查询的存储库方法。这些查询可能位于共享库中,并且在不同项目中编写类似的测试效率不高(在这种情况下,回归很重要)