在使用RetroFit和MockWebServer时,我想模拟没有网络的情况。
我目前正在使用Espresso进行测试,并在开始测试之前将MockWebServer的url提供给RestAdapter。这对于模拟服务器响应等都很有用,但是我看不到一种简单的方法来编写当设备没有网络时抛出的java.net.ConnectException异常。我可以看到MockResponse允许节流、模拟等等,但不是一个自定义的异常。
我知道我可以嘲笑retrofit使用的实际web接口,但如果可能的话,我想使用与其他测试相同的方法,如果可能的话,使用MockWebServer。
我想我错过了一件简单的事情:)
谢谢
发布于 2014-07-25 16:23:49
改造有一个retrofit-mock模块,它提供了一个MockRestAdapter类,其目的是模拟网络延迟和错误。
这是与普通RestAdapter一起使用的,用于创建服务的实例。您可以在repo的samples/mock-github-client/文件夹中看到完整的示例:https://github.com/square/retrofit/tree/parent-1.9.0/retrofit-samples/mock-github-client
MockRestAdapter提供了以下API:
setDelay -设置网络往返延迟,以毫秒为单位。setVariancePercentage -设置网络往返延迟的正负方差百分比.setErrorPercentage --设置对返回true的calculateIsFailure()调用的百分比。在您的测试中,您可以调用setErrorPercentage(100)以确保会发生网络错误。默认情况下,抛出错误的时间是延迟的0到3倍。将延迟设置为0以获得即时结果。
发布于 2020-04-02 08:55:42
用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);通过这种方式,您可以模拟网络错误,比如在响应或超时异常之前过早关闭连接。
发布于 2014-07-25 12:18:52
为了弄清楚什么类型的异常,您可以看到不同的地方:
所以你可以得到两种类型:
UnknownHostException -当你没有互联网或未知主机时.要模拟这种情况,请将一个不正确的端点设置为适配器。
mockwebserver可以抛出超时异常。你可以在这里看到怎么做的:
https://github.com/square/okhttp/tree/master/mockwebserver
真的,我不知道你的代码是什么,但我希望这是有用的
https://stackoverflow.com/questions/24952513
复制相似问题