java - JUnit+Mockito 或 RestAssured
问题描述
请帮助我选择正确的方法来测试 REST API (Java)。
我在以前的项目中使用过 JUnit 和 Mockito,我知道它需要大量的时间/精力来获得足够的代码覆盖率。但最近我开始了解 Rest-Assured,它似乎很有希望。请根据您的经验提出建议。
解决方案
在这种情况下,JUnit 是一个runner。这个问题实际上是关于单元测试和集成测试之间的区别,两者都可以使用JUnit作为周围的执行框架来实现。
您可以使用多种框架组合。一些常见的:
- 用于单元测试的 JUnit + mockito - 您的 REST API 控制器 bean 连接到轻量级/模拟依赖项,您通过 JAVA 执行 API
- JUnit + Cucumber + RESTAssured 用于集成测试 - 您可以在其中编写一个测试夹具,该夹具期望针对正在运行的服务器执行以执行其 API
这些极端之间也有一些点。您必须决定您的测试在测试金字塔中的位置。对于高度排列的测试,您将需要编写单元测试以便能够轻松地实现排列并获得执行速度。如果您真的想冒烟测试您的 API 是否可用,并且已经对它们进行了单元测试,那么您将需要编写少量集成测试。
在频谱的各个点之间,有 mockito + 服务的本机测试库的组合。例如,在 Spring 中有 SpringTest,在 Jersey 中有 JerseyTest/Grizzly 框架。在这些情况下,会建立一个非真实的 http 服务器来托管您的 REST 服务,然后您通过框架的客户端通过对它的模拟 REST 调用对其进行测试。本单元测试 HTTP 编组层以及 REST 控制器代码的第一层。
推荐阅读
- c++ - C++ - 以面向性能的方式读取日志级别
- dns - 当我在 DNS 中添加具有相同域名和不同目标的两个 (A) 行时会发生什么
- single-sign-on - Keycloak 使用工件绑定抛出 400 Bad request 异常
- time-series - 解释 auto.arima() 的输出
- ios - SwiftUI:NavigationView 中的 TextField 无法编辑
- android - Android Work Manager Retrofit libc:致命信号 11 Android 6
- python - 使用正则表达式组织电话号码
- python - 无法打开 Python:在 VScode 中选择解释器或 Jupyter 笔记本
- flutter - Flutter 布局、对齐、页面控制器,如何让 OnboardingScreen 只有一次?
- nativescript - 如何在 Visual Studio 应用中心构建我的 nativescript 应用程序