Модульный тест для тайм-аута запроса - PullRequest
0 голосов
/ 01 ноября 2019

Мне нужно написать интеграцию между тремя приложениями. У двух из этих приложений нет доступа к коду, потому что они являются сторонними приложениями. Я буду называть эти приложения сторонним приложением № 1 и сторонним приложением № 2. Если при интеграции этих трех приложений возникает ошибка, я хочу, чтобы стороннее приложение № 1 получило соответствующий код состояния.

enter image description here

Однако яВ настоящее время наблюдается следующее поведение:

enter image description here

Мое приложение представляет собой приложение с загрузочной пружиной с конечной точкой, которая при вызове синхронно выполняет запрос PATCH, используяшаблон отдыха для API-интерфейса отдыха # 2 стороннего приложения. Однако иногда я вижу проблему, когда запрос к стороннему приложению занимает недопустимое время (до 8 часов). Когда это происходит, журналы для приложения # 1 показывают, что оно получило «Нет ответа». Я намереваюсь написать исправление для этой проблемы, добавив тайм-аут к запросу из моего приложения в стороннее приложение № 2 (как описано здесь https://howtodoinjava.com/spring-boot2/resttemplate/resttemplate-timeout-example/). Это должно как минимум гарантировать, что код состояния будет возвращен стороннему приложению# 1.

Подводя итог, я хочу написать тест, имитирующий сбой запроса к стороннему приложению № 2. Через 5 секунд после сбоя запроса я хочу вернуть определенный код состояния исходному приложению. который вызвал конечную точку. Я собираюсь попытаться написать исправление для этой проблемы, реализовав тайм-аут для запроса, представленного стрелкой № 2. Однако я не уверен, как правильно написать тест, который имитирует эту проблему и проверяет, что мывидеть правильное поведение. Моя цель - написать тест, который проверяет, что мое приложение возвращает ошибку с кодом ответа стороннему приложению № 1 при возникновении сценария, в котором запрос к стороннему приложению № 2 длится дольше указанного периода времени. (возможно 5 секкунд). Тем не менее, я видел, как люди предлагают такие вещи, чтобы гарантировать, что тестовый запрос занимает определенное количество времени.

this.mockMvc.perform(put(expectedUrl))
    .andDo((result) -> {
        Thread.sleep(6000);
    }).andReturn();

Однако мое исправление для этой проблемы будет состоять в том, чтобы установить несколько свойств на фабрике запросов, используемой самим шаблоном rest (как описано в приведенной ссылке), и я не чувствую необходимости делать это вышеявляется адекватной проверкой такого поведения, поскольку мы никогда не проверяем это (хотя я могу ошибаться). Короче говоря, как я могу написать тест, который проверяет, что запрос истекает по истечении заданного периода времени? Заранее спасибо за любые рекомендации или помощь.

...