Записать юнит-тест на время ожидания

Я написал тестовый пример для 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 ответ

Вы можете создать пользовательский OkHttpClient в одноэлементном шаблоне, а затем подготовить его в setup() в модульном тесте.

Другие вопросы по тегам