unit-testing - 如何为 MockWebServer 设置默认响应?

标签 unit-testing testing kotlin mockwebserver

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/

相关文章:

java - 如何在mockito中模拟Class.forName()

ruby-on-rails - 如何出于测试目的禁用缓存清扫器

java - 如何模拟 Dao 两次但使用同一个对象调用?

javascript - 模拟需要服务

testing - 强制 NetBeans 7.3 在测试运行时重新编译项目?

java - 使用 viewModels 从 ChildFragment 访问 ParentFragment 中的 ViewModel

java - 用于配置测试的自定义注释

javascript - 使用 React router 进行 enzyme 集成测试测试 - 使用链接测试组件更新

kotlin - 在CORDA中扩展Cash.State

java - Android东西:使用命令writeBuffer,write,byte []在i2c寄存器中写入许多字节