MockWebServer是很棒的库,但有一件事情出奇地难以做到:设置默认响应。
具体来说:我希望能够设置在未使用 server.enqueue(response)
指定响应时返回的响应。
我希望能够做这样的事情:
server.setDefaultResponse(okResponse)
server.enqueue(customResponse)
然后当我的测试调用服务器两次(或更多次)时,第一个之后的每个响应都是 okResponse
。
当测试变得更加复杂并且需要对服务器进行多次调用时,有时指定每个响应(通常是简单的 200 OK)会很乏味并且会污染测试。
有没有比创建自己的 Dispatcher 更简单的方法呢? ?正确地创建它(支持多个响应)对于这么小的东西来说听起来有点矫枉过正。
最佳答案
与实现您自己的 Dispatcher
相比,可以进行改进。在查看 MockWebServer
时实现我发现它的默认调度程序是 QueueDispatcher
.
它有一些非常方便的方法,比如:
public void setFailFast(boolean failFast)
public void setFailFast(MockResponse failFastResponse)
setFailFast(true)
将服务器设置为“快速失败”模式,即如果队列中没有响应,它不会等待,只是立即返回 HTTP 404 响应。
setFailFast(okResponse)
设置响应以“快速失败”模式返回,这正好回答了这个问题。
问题是,您无法直接访问 MockWebServer
中的 dispatcher 字段,因此您需要做的是设置您自己的 QueueDispatcher
实例,然后设置默认响应(或“快速失败”响应),就像这样:
val dispatcher = QueueDispatcher()
dispatcher.setFailFast(okResponse)
server.setDispatcher(dispatcher)
关于unit-testing - 如何为 MockWebServer 设置默认响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52280164/