【问题标题】:MockWebServer enqueue by path condition?MockWebServer 按路径条件排队?
【发布时间】:2019-12-03 10:23:03
【问题描述】:
我正在使用来自 okhttp3 的MockWebServer 来针对模拟的外部网络服务器测试我的网络客户端。
我想配置模拟,以便按路径有条件地返回响应。
像伪代码:
mockWebServer.expectPath("/products")
.enqueue(new MockResponse().setBody(..))
.expectPath("/items")
.enqueue(new MockResponse().setBody(..));
这可能吗?
【问题讨论】:
标签:
mocking
retrofit2
okhttp3
mockwebserver
【解决方案1】:
是的,这是可能的。我遇到了类似的问题,我最终在 MockWebServer 之上编写了一个小型开源 Android 库,以使其尽可能简单:Mockinizer
在您的情况下,您的 OkHttpClient 设置如下所示:
val mocks: Map<RequestFilter, MockResponse> = mapOf(
RequestFilter("/products") to MockResponse().apply {
setBody("..")
},
RequestFilter("/items") to MockResponse().apply {
setBody("..")
}
)
OkHttpClient.Builder()
.addInterceptor(loggingInterceptor)
.mockinize(mocks) // <-- just plug in your custom mocks here
.build()
您只需将模拟插入 OkHttpClient。您不必费心自己设置 mockWebServer。 Mockingizer 会自动为您执行此操作 ;-)