Как использовать MockRestServiceServer с несколькими URL-адресами?
Мне нужно настроить несколько ожиданий на экземпляре MockRestServiceServer. Ожидания для двух разных URL:
- URL звонка №1
- URL звонка №1 (во второй раз)
- URL звонка № 2
Один и тот же URL-адрес вызывается дважды, затем выполняется третий вызов одного и того же URL-адреса с разными параметрами запроса.
У меня есть один экземпляр RestTemplate с балансировкой нагрузки, доступный для вставки в мой тест, и я передаю его в MockRestServiceServer.createServer().
Я попытался вставить эти 3 ожидания в мой экземпляр MockRestServiceServer, но тест не удался, утверждая, что третий URL-адрес был ожидаемым, но он увидел первый. Похоже, что я либо перезаписываю ожидания, либо здесь делится что-то с состоянием, которое держит фиктивный сервер в неправильном состоянии.
Может кто-нибудь показать мне пример того, как это сделать правильно?
2 ответа
Если кто-то не может понять @alex.b, ответьте
// Create a mock server with UnorderedRequestExpectationManager
MockRestServiceServer mockServer = MockRestServiceServer.bindTo(restTemplate).build(new UnorderedRequestExpectationManager());
// Add multiple rest url
mockServer.expect(ExpectedCount.once(),
requestTo(URL1))
.andExpect(method(HttpMethod.GET))
.andRespond(withStatus(HttpStatus.OK)
.contentType(MediaType.APPLICATION_JSON)
.body(result1));
mockServer.expect(ExpectedCount.once(),
requestTo(URL2))
.andExpect(method(HttpMethod.GET))
.andRespond(withStatus(HttpStatus.OK)
.contentType(MediaType.APPLICATION_JSON)
.body(result2));
// Add as much as you want
Ваша проблема может быть решена, если вы используете не менеджер по умолчанию ожидания в Mock Server org.springframework.test.web.client.MockRestServiceServer#MockRestServiceServer
: он принимает параметр org.springframework.test.web.client.RequestExpectationManager
,
Вы можете передать этот тип: org.springframework.test.web.client.UnorderedRequestExpectationManager