Dor*_*ori 26 android retrofit mockwebserver
我想在使用RetroFit
和时模拟无网络案例MockWebServer
.
我正在测试使用Espresso
和提供MockWebServer
s url到RestAdapter
我开始测试之前.这非常适合模拟服务器响应等等,但是我无法看到一种简单的方法来编写java.net.ConnectException
设备没有网络时引发的异常的脚本.我可以看到MockResponse允许限制模拟等,但不是自定义异常.
我知道我可以嘲笑使用的实际web api接口,retrofit
但是如果可能的话,我想使用与其他测试相同的方法MockWebServer
.
我想我只是错过了一些简单的东西:)
谢谢
Jak*_*ton 24
Retrofit有一个retrofit-mock
模块,它提供了一个MockRestAdapter
类,其目的是模拟网络延迟和错误.
这是与正常一起使用RestAdapter
来创建服务的实例.您可以samples/mock-github-client/
在repo 的文件夹中看到完整的示例:https://github.com/square/retrofit/tree/parent-1.9.0/retrofit-samples/mock-github-client
MockRestAdapter
提供这些API:
setDelay
- 设置网络往返延迟,以毫秒为单位.setVariancePercentage
- 设置网络往返延迟的正或负方差百分比.setErrorPercentage
- 设置calculateIsFailure()
返回的呼叫百分比true
.在测试中,您可以调用setErrorPercentage(100)
以确保发生网络错误.默认情况下,抛出错误的时间是延迟的0到3倍.将延迟设置为0以获得即时结果.
小智 8
要明确各种类型的例外情况,您可以看到差异:
所以你可以得到两种类型:
UnknownHostException - 如果您没有互联网或未知主机...来模拟此情况,请将适配器设置为不正确的终点.
ConnectException - mockwebserver可以抛出超时异常.你可以在这里看到如何做到这一点:
https://github.com/square/okhttp/tree/master/mockwebserver
真的我不知道你的代码是怎么回事,但我希望这很有用
小智 6
使用 MockWebServer 模拟网络问题的最简单方法是将 SocketPolicy 设置为 SocketPolicy.DISCONNECT_AT_START、SocketPolicy.NO_RESPONSE 等:
MockWebServer server = new MockWebServer();
MockResponse response = new MockResponse()
.setSocketPolicy(SocketPolicy.DISCONNECT_AT_START);
server.enqueue(response);
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您可以模拟网络错误,例如在响应或超时异常之前过早关闭连接
归档时间: |
|
查看次数: |
11637 次 |
最近记录: |