При использовании MockRestServiceServer невозможно точно проверить количество вызовов сервиса - PullRequest
0 голосов
/ 17 сентября 2018

Я кодирую некоторую логику повторных попыток для вызова службы и пытаюсь проверить, что Шаблон отдыха пытается выполнить службу определенное количество раз в модульном тесте. Я использую следующий код для выполнения теста.

MockRestServiceServer mockServer = MockRestServiceServer.bindTo(restTemplate).build();
mockServer.expect(ExpectedCount.times(5), method(HttpMethod.GET))
  .andRespond(withServerError());

service.call();

Я установил логику повторных попыток только на две попытки. Приведенный выше тестовый код требует, чтобы это произошло пять раз, но тест всегда проходит. Фактически, единственный способ, с помощью которого я могу провалить этот тест, - установить ожидаемое число в единицу (меньше, чем количество фактических вызовов). Такая же проблема возникает, когда я использую ExpectedCount.min или ExpectedCount.between в том смысле, что тест не пройдёт, только когда фактические вызовы превысят ожидаемое.

Мне нужно иметь возможность проверить точное количество обращений в сервис, желательно без использования Mockito.

Ответы [ 2 ]

0 голосов
/ 11 июля 2019

Вам нужно позвонить mockServer.verify() после выполнения всех ваших запросов, чтобы проверить, оправданы ли ожидания.В противном случае вы можете сойти с рук, никогда не делая никаких запросов.

0 голосов
/ 18 октября 2018

Вы можете создать свой собственный ResponseCreator с логикой, которую вы хотите. Например:

class DelegateResponseCreator implements ResponseCreator {
    private final ResponseCreator[] delegates;
    private int toExecute = 0;

    public DelegateResponseCreator(final ResponseCreator... delegates) {
        this.delegates = delegates;
    }

    @Override
    public ClientHttpResponse createResponse(final ClientHttpRequest request) throws IOException {
        ClientHttpResponse ret = this.delegates[this.toExecute % this.delegates.length].createResponse(request);
        this.toExecute++;

        return ret;
    }

}

Этот делегат выполняет ResponseDelegates по порядку.

Таким образом, вы можете смоделировать ответ на номер вызова, который вы хотите

mockServer.expect(ExpectedCount.times(5), MockRestRequestMatchers.method(HttpMethod.GET))
            .andRespond(new DelegateResponseCreator(
                    MockRestResponseCreators.withServerError(), 
                    MockRestResponseCreators.withServerError(), 
                    MockRestResponseCreators.withServerError(), 
                    MockRestResponseCreators.withServerError(), 
                    MockRestResponseCreators.withSuccess()
                    ));

В этом примере первые четыре вызова вернут ошибку сервера, а пятый будет успешным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...