我正在尝试使用 MockWebServer 测试 HTTP 超时场景,该服务器响应使用 Retrofit/OkHttp 发送的测试请求。 (这个问题几年前就被问过,但当时涉及 MockWebServer 中的一个错误。此外,API 自那以后已经发生了相当大的变化,所以我认为重新发布这个问题是有必要的。)
似乎有几种相关的方法,但我希望有一个清晰的示例来解决此问题:我不确定...之间的区别
.delayBody
和.throttleBody
此外,这两种方法似乎都只是延迟/限制主体 - 是否无法为响应标头设置超时? IE。类似“在下一个传入请求后等待 X 秒,然后再发送任何响应”。
尝试将响应的套接字策略设置为 NO_RESPONSE。
setSocketPolicy()
方法已弃用。
MockResponse mockResponse = new MockResponse().setBodyDelay(10, TimeUnit.SECONDS);
这将使 MockWebServer 响应延迟 10 秒。
为了回答原来的问题,fgysin 应该尝试以下内容:
MockResponse mockResponse = new MockResponse().setHeadersDelay(10, TimeUnit.SECONDS);
我尝试了许多建议的方法,但没有成功。我认为不模拟返回任何响应应该是正确的,并且您的请求将超时,但是您需要通过为每个测试重置模拟服务器来确保您的测试用例请求响应不会干扰其他测试用例响应。 归根结底,超时就是没有响应,不是吗。