为okhttp超时写单元测试

时间:2017-07-20 07:01:38

标签: android junit4 okhttp3 powermockito mockserver

我已经为okHttp SocketTimeoutException 编写了测试用例,如下所示:

    @Test
    public void contactDetailsTimeOut() throws Exception {
    server.enqueue(new MockResponse().setBody("{}").setBodyDelay(31, TimeUnit.SECONDS));

    HttpUrl baseUrl = server.url("/v1/contact/");
    userProfilePresenter.contactDetails(baseUrl.toString());
    verify(userProfileView).error(isA(SocketTimeoutException.class), isA(String.class));
    }

setSocketPolicy 设置为 SocketPolicy.NO_RESPONSE

可以实现同样的效果
    @Test
    public void contactDetailsTimeOut() throws Exception {
    server.enqueue(new MockResponse().setBody("{}").setSocketPolicy(SocketPolicy.NO_RESPONSE));

    HttpUrl baseUrl = server.url("/v1/contact/");
    userProfilePresenter.contactDetails(baseUrl.toString());
    verify(userProfileView).error(isA(SocketTimeoutException.class), isA(String.class));
    }

因为我已将okHttp readTimeout 设置为30秒。此测试用例等待30秒通过。预期的行为。下面是okHttpClient的代码

private static OkHttpClient okHttpClient = new OkHttpClient.Builder()
            .readTimeout(30, TimeUnit.SECONDS)
            .build();

我的问题是:有没有办法可以在更短的时间内测试SocketTimeoutException?我不想减少客户端的时间安排。

1 个答案:

答案 0 :(得分:0)

您可以以单件模式创建自定义OkHttpClient,然后您可以在单元测试中的setup()中进行准备。