Код: Выделить всё
okhttp3.mockwebserver- Поставить в очередь все ответы по порядку ()
Код: Выделить всё
mockWebServer.enqueue(...) - Определите диспетчер, который определяет ответы на основе какой-либо другой политики (например, отправка по пути запроса
Диспетчер гораздо более эффективен, чем постановка в очередь каждого запроса для каждого теста, но его нельзя использовать для тестирования механизма повторных попыток. (например, Retry.backoff(3, Duration.ofSeconds(10)))). Ставить запросы в очередь легко, но утомительно для любого другого теста, не требующего повторной попытки.
На данный момент единственное решение, которое я могу придумать, — это использовать два отдельных MockWebServer для два типа тестов (один использует постановку в очередь для тестов на основе повторов, другой использует диспетчер для остальных тестов API). Это кажется неоптимальным, особенно потому, что диспетчер init() выполняется перед каждым тестом (
Код: Выделить всё
@BeforeAllЕсть ли способ объединить оба этих подхода в один? В основном я ищу что-то вроде:
Код: Выделить всё
@Override
public MockResponse dispatch(RecordedRequest req) throws InterruptedException {
return switch (req.getPath()) {
case "/query1" -> new MockResponse().setResponseCode(200).setBody(...);
case "/query2" -> new MockResponse().setResponseCode(200).setBody(...);
case "/query3" -> server.enqueue(new MockResponse().setResponseCode(502));
server.enqueue(new MockResponse().setResponseCode(502));
server.enqueue(new MockResponse().setResponseCode(200).setBody(...));
Но это, очевидно, не работает, поскольку методу Dispatcher Dispatcher(...) требуется одно возвращаемое значение MockResponse.
Я также ограничен использованием библиотек, уже имеющихся в проект, поэтому ответ на этот аналогичный вопрос мне не помог (к тому же эта библиотека не обновлялась более 5 лет).
Подробнее здесь: https://stackoverflow.com/questions/793 ... kwebserver
Мобильная версия