如何设置MockWebServer的默认响应?

时间:2018-09-11 16:13:47

标签: unit-testing testing kotlin mockwebserver

MockWebServer是一个很棒的库,但是有一件很难做的事情:设置默认响应。

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

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

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

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

当测试变得更加复杂并且需要多次调用服务器时,有时指定每个单个响应(通常简单地为200 OK)就很繁琐并且会污染测试。

有没有比创建自己的Dispatcher更简单的方法了?正确地创建它(支持多个响应)听起来像是对这么小的事情的过大杀伤力。

1 个答案:

答案 0 :(得分:0)

与实现自己的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)