首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Retrofit和MockWebServer模拟无网络

使用Retrofit和MockWebServer模拟无网络
EN

Stack Overflow用户
提问于 2014-07-25 09:34:02
回答 6查看 18.3K关注 0票数 33

在使用RetroFitMockWebServer时,我想模拟没有网络的情况。

我目前正在使用Espresso进行测试,并在开始测试之前将MockWebServer的url提供给RestAdapter。这对于模拟服务器响应等都很有用,但是我看不到一种简单的方法来编写当设备没有网络时抛出的java.net.ConnectException异常。我可以看到MockResponse允许节流、模拟等等,但不是一个自定义的异常。

我知道我可以嘲笑retrofit使用的实际web接口,但如果可能的话,我想使用与其他测试相同的方法,如果可能的话,使用MockWebServer

我想我错过了一件简单的事情:)

谢谢

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 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 --设置对返回truecalculateIsFailure()调用的百分比。

在您的测试中,您可以调用setErrorPercentage(100)以确保会发生网络错误。默认情况下,抛出错误的时间是延迟的0到3倍。将延迟设置为0以获得即时结果。

票数 28
EN

Stack Overflow用户

发布于 2020-04-02 08:55:42

用MockWebServer模拟网络问题的最简单方法是将SocketPolicy设置为SocketPolicy.DISCONNECT_AT_START、SocketPolicy.NO_RESPONSE等:

代码语言:javascript
复制
MockWebServer server = new MockWebServer();

MockResponse response = new MockResponse()
  .setSocketPolicy(SocketPolicy.DISCONNECT_AT_START);

server.enqueue(response);

通过这种方式,您可以模拟网络错误,比如在响应或超时异常之前过早关闭连接。

票数 12
EN

Stack Overflow用户

发布于 2014-07-25 12:18:52

为了弄清楚什么类型的异常,您可以看到不同的地方:

Internet Connection Error

所以你可以得到两种类型:

UnknownHostException -当你没有互联网或未知主机时.要模拟这种情况,请将一个不正确的端点设置为适配器。

mockwebserver可以抛出超时异常。你可以在这里看到怎么做的:

https://github.com/square/okhttp/tree/master/mockwebserver

真的,我不知道你的代码是什么,但我希望这是有用的

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24952513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档