Der*_*ick 2 java integration-testing springmockito spring-boot spring-boot-test
I want to test my Spring Boot application's layers - service, data, controllers.
我知道,通过Spring Boot,我们可以在服务器参与或不参与的情况下(通过创建模拟环境)对它们进行测试。所以我的问题是-测试这些层的最佳实践是什么?还是取决于我们要测试的特定层?
单元测试非常简单..您坚持SRP原则,模拟出所有协作者并进行独立测试。
对于集成测试,没有明确的答案和明确的标准。它始终取决于您正在处理的项目,甚至取决于特定功能。
在使用了一些Spring Boot应用程序之后,我倾向于将您的IT套件分为四个部分/类别:
1)REST API测试
因此,我们仅测试@Restontrollers。您使用@WebMvcTest(MyController.class)或@WebFluxTest(MyController.class)取决于使用的控制器类型。从服务层到底层的任何事物都将被模拟。您尽可能强调输入参数/请求正文,并从每种组合中测试地狱。
2)存储库测试
测试仅验证ORM层。您@DataJpaTest用于此。在这里,您可以针对每种存储库方法测试每种可能的情况,而无需关心调用它的内容等。
3)切片测试
在这里验证@Component与@ServiceBean 之间的交互。这是测试您的应用程序实际业务逻辑的地方。由您决定是通过REST发送数据还是使用对最顶层的调用@Service。@Repository在这种情况下,我总是将图层存根。
4)端到端测试
这些可以在真实的Web服务器上工作:
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
这里什么都没有嘲笑。
讨论区
这里的关键是确定应使用每种方法的量,同时要记住,切片测试可能是最重要的。
当然,不应将主要重点放在E2E测试上。它们在句子结尾有点像逗号。它们是最慢的,需要最多的设置。因此,它们最容易出错,难以维护且难以理解。理想情况下,应将这些限制降至最低(仅涵盖最关键的情况)。
同样,在运行IT套件时,应按以下顺序将它们分组:
1)控制器测试
2)切片测试
3)存储库测试
4)端到端测试
(从最快的,要求最少的环境交互到最慢的交互)。
同样,由团队决定我们要使用哪个,以什么顺序和频率使用。
补充阅读: 我写了一篇关于常见集成测试错误的文章,该文章可以补充上面提供的信息,并在您的项目中进一步帮助您。
| 归档时间: |
|
| 查看次数: |
68 次 |
| 最近记录: |