1

我正在使用MockWebServerokhttp3 来针对模拟的外部网络服务器测试我的网络客户端。

我想配置模拟,以便通过 path 有条件地返回响应。

像伪代码:

mockWebServer.expectPath("/products")
             .enqueue(new MockResponse().setBody(..))
             .expectPath("/items")
             .enqueue(new MockResponse().setBody(..));

那可能吗?

4

1 回答 1

0

是的,这是可能的。我遇到了类似的问题,最后我在 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 会自动为您执行此操作 ;-)

于 2019-08-07T20:53:00.930 回答