MockWebServer是一个很棒的库,但是有一件很难做的事情:设置默认响应。
具体来说:如果没有使用server.enqueue(response)
指定响应,我希望能够设置返回的响应。
我希望能够做类似的事情:
server.setDefaultResponse(okResponse)
server.enqueue(customResponse)
然后,当我的测试两次(或多次)调用服务器时,第一个之后的每个响应都是okResponse
。
当测试变得更加复杂并且需要多次调用服务器时,有时指定每个单个响应(通常简单地为200 OK)就很繁琐并且会污染测试。
有没有比创建自己的Dispatcher更简单的方法了?正确地创建它(支持多个响应)听起来像是对这么小的事情的过大杀伤力。
答案 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)