mem*_*und 6 java mockwebserver okhttp3
我想创建一个集成测试并模拟一个远程网络服务,如下所示:
MockWebServer server = new MockWebServer();
server.enqueue(new MockResponse()...);
server.enqueue(new MockResponse()...);
server.enqueue(new MockResponse()...);
Run Code Online (Sandbox Code Playgroud)
问题:我有一个案例,其中 3 个请求并行发送到远程。因此,顺序总是随机的。
问题:如何告诉 MockWebServer 为预期的请求分配响应?
像伪代码:
server.enqueue(new MockResponse()).forExpectedRequest(req1);
server.enqueue(new MockResponse()).forExpectedRequest(req2);
server.enqueue(new MockResponse()).forExpectedRequest(req3);
Run Code Online (Sandbox Code Playgroud)
那可能吗?
Sne*_*neh 11
从他们的文档
默认情况下 MockWebServer 使用队列来指定一系列响应。使用 Dispatcher 处理使用另一个策略的请求。一种自然策略是在请求路径上调度。例如,您可以过滤请求而不是使用 server.enqueue()
您可以做的是在下面的代码中进行更改。
final Dispatcher dispatcher = new Dispatcher() {
@Override
public MockResponse dispatch (RecordedRequest request) throws InterruptedException {
switch (request.getPath()) {
case "/v1/login/auth/":
return new MockResponse().setResponseCode(200);
case "v1/check/version/":
return new MockResponse().setResponseCode(200).setBody("version=9");
case "/v1/profile/info":
return new MockResponse().setResponseCode(200).setBody("{\\\"info\\\":{\\\"name\":\"Lucas Albuquerque\",\"age\":\"21\",\"gender\":\"male\"}}");
}
return new MockResponse().setResponseCode(404);
}
};
server.setDispatcher(dispatcher);
Run Code Online (Sandbox Code Playgroud)
他们在路径上使用 switch 语句,但您可以更改它并在此处实现您的自定义逻辑。
| 归档时间: |
|
| 查看次数: |
3050 次 |
| 最近记录: |