2

MockWebServer是一个很棒的库,但是有一件事情令人惊讶地难以做到:设置默认响应。

具体来说:如果没有使用指定响应,我希望能够设置返回的响应server.enqueue(response)

我希望能够做类似的事情:

server.setDefaultResponse(okResponse)
server.enqueue(customResponse)

然后当我的测试调用服务器两次(或更多)时,第一个响应之后的每个响应都是okResponse.

当测试变得更加复杂并且需要对服务器进行多次调用时,有时指定每个响应(通常是简单的 200 OK)是乏味的并且会污染测试。

有没有比创建自己的Dispatcher更简单的方法?正确创建它(支持多个响应)对于这么小的东西来说听起来有点矫枉过正。

4

1 回答 1

2

与实现您自己的Dispatcher. 在查看MockWebServer实现时,我发现它的默认调度程序是QueueDispatcher.

它有一些非常方便的方法,比如:

public void setFailFast(boolean failFast)

public void setFailFast(MockResponse failFastResponse)

setFailFast(true)将服务器设置为“快速失败”模式,即如果队列中没有响应,它不会等待,只是立即返回 HTTP 404 响应。

setFailFast(okResponse)将响应设置为以“快速失败”模式返回,这正好回答了这个问题。

问题是,您无法直接访问 中的调度程序字段MockWebServer,因此您需要做的是设置自己的实例,QueueDispatcher然后在其上设置默认响应(或“快速失败”响应),如下所示:

val dispatcher = QueueDispatcher()
dispatcher.setFailFast(okResponse)
server.setDispatcher(dispatcher)
于 2018-09-11T16:13:47.017 回答