拓展阅读
jmockit-01-test 之 jmockit 入门使用案例
mockito-01-overview mockito 简介及入门使用
Hoverfly Java - Easy Creation of Stub Http Servers for Testing
Java原生语言绑定的Hoverfly,是一个Go语言代理工具,允许您在单元测试中模拟HTTP服务。
这个过程的另一个术语是服务虚拟化。
特性:
- 模拟HTTP/HTTPS服务
- 基于URL、方法、正文和头部组合的严格或宽松的HTTP请求匹配
- 流畅且表达力强的DSL,用于轻松生成模拟服务
- 在请求/响应体生成期间将对象自动编组成JSON
- 通过捕获实时流量创建模拟
- Hoverfly是一个代理,因此您无需更改发出请求的主机
- 单个Hoverfly实例支持多个主机/服务
- 自动支持HTTPS,无需额外配置
- 支持相互TLS身份验证捕获
- 与标准Hoverfly JSON兼容,方便在Java和其他原生语言绑定之间重用数据
- 使用外部管理的Hoverfly集群进行API模拟
- 请求验证
- 响应模板化
- 有状态的捕获/模拟
- JUnit 5扩展
入门例子
maven
<dependency>
<groupId>io.specto</groupId>
<artifactId>hoverfly-java</artifactId>
<version>0.14.0</version>
<scope>test</scope>
</dependency>
代码示例
最简单的方法是使用JUnit规则开始。
在幕后,JVM代理设置将被配置为使用托管的Hoverfly进程,因此您可以像往常一样发出请求,只不过这次Hoverfly会响应而不是真实服务(假设您的HTTP客户端尊重JVM代理设置):
import static io.specto.hoverfly.junit.core.SimulationSource.dsl;
import static io.specto.hoverfly.junit.dsl.HoverflyDsl.service;
import static io.specto.hoverfly.junit.dsl.ResponseCreators.success;
public class HoverflyExample {
@ClassRule
public static HoverflyRule hoverflyRule = HoverflyRule.inSimulationMode(dsl(
service("www.my-test.com")
.get("/api/bookings/1")
.willReturn(success("{\"bookingId\":\"1\"}", "application/json"))
));
@Test
public void shouldBeAbleToGetABookingUsingHoverfly() {
// When
final ResponseEntity<String> getBookingResponse = restTemplate.getForEntity("http://www.my-test.com/api/bookings/1", String.class);
// Then
assertThat(getBookingResponse.getStatusCode()).isEqualTo(OK);
assertThatJSON(getBookingResponse.getBody()).isEqualTo("{"\"bookingId\":\"1\"}");
}
// Continues...
Hoverfly Java 和 wiremock 比较有什么差异点?
Hoverfly Java 和 WireMock 都是用于服务虚拟化和模拟的工具,但它们有一些区别。
以下是它们之间的一些差异点:
1. 实现语言:
-
Hoverfly Java: Hoverfly Java 是 Hoverfly 的 Java 语言绑定,基于 Hoverfly 服务虚拟化工具。
-
WireMock: WireMock 是使用 Java 编写的独立的服务虚拟化库和服务器。
2. 语法和DSL:
-
Hoverfly Java: 提供了流畅且表达力强的 DSL(领域专用语言),用于定义和生成模拟服务的规则。
-
WireMock: 也有自己的 DSL,用于配置服务的模拟和响应。
3. 支持的语言和平台:
-
Hoverfly Java: 主要支持 Java 平台,适用于 Java 应用程序的单元测试。
-
WireMock: 由于其独立性,支持多种语言和平台,并且可以用于各种应用程序和测试场景。
4. JUnit集成:
-
Hoverfly Java: 提供了JUnit扩展,简化了在测试中集成 Hoverfly 的过程。
-
WireMock: 也可以与 JUnit 集成,但没有 Hoverfly Java 提供的专用扩展。
5. 流量捕获:
-
Hoverfly Java: 具有流量捕获功能,可以通过捕获实时流量来创建模拟服务。
-
WireMock: 通常需要手动配置 stubs 或使用录制和回放工具来创建模拟服务,相对于 Hoverfly Java 较为简单。
6. TLS和HTTPS支持:
-
Hoverfly Java: 提供对相互TLS身份验证的支持,并自动支持 HTTPS。
-
WireMock: 也支持 HTTPS,但相互TLS身份验证的支持可能需要更多手动配置。
7. 社区和生态系统:
-
Hoverfly Java: 相对较新,可能没有 WireMock 那样庞大的社区和生态系统。
-
WireMock: 是一个成熟且广泛使用的项目,有大量的社区支持和丰富的文档。