如何使用WireMock进行单元测试
WireMock是一个用于模拟HTTP服务的Java库,可以帮助开发人员编写和运行用于单元测试的自动化测试。
WireMock可以作为一个独立的HTTP服务器运行,可以配置预期的HTTP请求和响应,并记录执行请求的详细信息。它可以用于模拟后端服务,以便进行无依赖的集成测试。
下面给出WireMock的常用方法和Java样例代码:
1. 初始化和关闭WireMock服务器:
import com.github.tomakehurst.wiremock.WireMockServer;
import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options;
WireMockServer wireMockServer;
@Before
public void setup() {
wireMockServer = new WireMockServer(options().port(8080));
wireMockServer.start();
}
@After
public void tearDown() {
wireMockServer.stop();
}
2. 创建并匹配请求:
import static com.github.tomakehurst.wiremock.client.WireMock.*;
stubFor(get(urlEqualTo("/api/user"))
.willReturn(aResponse()
.withStatus(200)
.withHeader("Content-Type", "application/json")
.withBody("{\"username\": \"john\", \"email\": \"john@example.com\"}")));
上面的代码创建了一个GET请求的stub,当请求的URL是"/api/user"时,返回HTTP状态码200,Content-Type为"application/json",响应体是一个JSON字符串。
3. 验证请求的调用:
import static com.github.tomakehurst.wiremock.client.WireMock.*;
verify(getRequestedFor(urlEqualTo("/api/user")));
上面的代码验证了是否有一个GET请求的URL是"/api/user"的调用。
4. 设置延迟和响应时间:
import static com.github.tomakehurst.wiremock.client.WireMock.*;
stubFor(get(urlEqualTo("/api/user"))
.willReturn(aResponse()
.withStatus(200)
.withFixedDelay(1000))); // 设置延迟1秒钟返回响应
上面的代码让请求返回响应前延迟1秒钟。
5. 设置请求匹配的条件:
import static com.github.tomakehurst.wiremock.client.WireMock.*;
stubFor(get(urlMatching("/api/user.*"))
.withQueryParam("id", equalTo("123"))
.willReturn(aResponse()
.withStatus(200)));
上面的代码使用正则表达式匹配URL,请求的参数id必须等于"123"。
Maven依赖:
<dependency>
<groupId>com.github.tomakehurst</groupId>
<artifactId>wiremock</artifactId>
<version>2.27.2</version>
<scope>test</scope>
</dependency>
以上就是使用WireMock进行单元测试的介绍和常用方法的示例代码。