使用 MockWebServer 时超时?

Posted

技术标签:

【中文标题】使用 MockWebServer 时超时?【英文标题】:Timeout while using MockWebServer? 【发布时间】:2018-07-10 15:19:58 【问题描述】:

我尝试将MockWebServer 用于对我的 API 的各种响应。 我做了一个简单的例子,只是想尝试一下我想做的是一种工作方法。

mockWebServer 不是用来“模拟”我的 http 连接的端点吗?像一个真正的服务器?每当我尝试拨打电话时我得到了 UnknownHostException。

我用错了吗? 不应该只是替换服务器的响应吗? (嘲笑它)

编辑:

我在清单中有互联网权限。

我用:

 androidTestImplementation 'com.squareup.okhttp3:mockwebserver:3.9.1'

代码:

 @Test
    public void myTest() throws IOException, InterruptedException 

        String url = "http://some-mock-url.com";

        MockWebServer server = new MockWebServer();
        server.enqueue(new MockResponse().setBody("Something not valid JSON response"));
        server.start();

        server.url(url);

        final CountDownLatch signal = new CountDownLatch(1);

        AndroidNetworking.get(url)
                .addQueryParameter("some_key", "some_value12345")
                .addHeaders("token", "token_1231234")
                .build()
                .getAsJSONObject(new JSONObjectRequestListener() 

                                     @Override
                                     public void onResponse(JSONObject response) 
                                         signal.countDown();
                                         Log.i("Response", "jsonObject: " + response);
                                     

                                     @Override
                                     public void onError(ANError anError) 
                                         signal.countDown();
                                         Log.i("Response", "error: " + anError.getMessage());
                                     
                                 
                );
        signal.await();
    

Logcat:

com.androidnetworking.error.ANError: java.net.UnknownHostException: 无法解析主机“some-mock-url.com”:没有关联的地址 主机名

【问题讨论】:

检查您的互联网连接权限。 @Shailesh 我有互联网权限。 勾选这个因为我无法在浏览器中打开你的网址***.com/questions/19951466/… @Shailesh 该网址是假的。没有这样的真实地址。这不是模拟服务器的目的吗?使用“假”端点? 【参考方案1】:

我找到了一个顺序颠倒的例子。

因此,您必须将 Mock 服务器的 url 设置为实际的 URL,而不是设置 Mock 服务器的 URL,例如:

myAPIsURL= mockWebServer.url("/").toString();

不是

mockWebServer.url(myAPIsURL);

【讨论】:

它对你有用吗?我正在尝试按照您的建议进行操作,但我仍然遇到同样的问题。如果您认为还有其他可能解决此问题,请提出建议 @Kaveri 是的,正如 answer 所述。【参考方案2】:

如果有人遇到同样的问题,MockWebServer 来自 OKHttp 的相同依赖项,因此它们都需要具有相同的依赖项版本。

【讨论】:

【参考方案3】:

对我来说这是一个代理问题。 我遵循了这个解决方案。 我现在没有收到未知主机异常。 https://***.com/a/41714851/5856146

【讨论】:

以上是关于使用 MockWebServer 时超时?的主要内容,如果未能解决你的问题,请参考以下文章

测试时如何从 MockWebServer 中提取参数?

未解决的参考:mockwebserver

使用 Retrofit 和 MockWebServer 模拟无网络

使用 MockWebServer 模拟嵌套的改造 api 调用

使用 MockWebServer 模拟嵌套的改造 api 调用

text 安卓中使用MockWebServer测试API