Как ожидать requestTo по шаблону String в MockRestServiceServer?
У меня есть тесты с:
org.springframework.test.web.client.MockRestServiceServer mockServer
Когда я бегу с any(String.class)
или точный URL они работают хорошо:
mockServer.expect(requestTo(any(String.class)))
.andExpect(method(HttpMethod.GET))
.andRespond(withSuccess("response", MediaType.APPLICATION_JSON));
Или же:
mockServer.expect(requestTo("https://exact-example-url.com/path"))
.andExpect(method(HttpMethod.GET))
.andRespond(withSuccess("response", MediaType.APPLICATION_JSON));
Я хочу ожидать запрос по шаблону String, чтобы избежать проверки точного URL. Я могу написать собственный сопоставитель, как в Spring MockRestServiceServer, обрабатывающий несколько запросов к одному и тому же URI (автообнаружение)
Есть ли другой способ сделать mockServer.expect(requestTo(".*example.*"))
по строковому образцу?
1 ответ
Я полагаю, что "любой" на самом деле метод Mockito.any()? В этом случае вы можете использовать Mockito.matches("regex"). См. Документы: https://static.javadoc.io/org.mockito/mockito-core/1.9.5/org/mockito/Matchers.html.
РЕДАКТИРОВАТЬ: Оказывается, что MockRestServiceServer использует сопоставления Hamcrest для проверки ожиданий (методы, такие как requestTo, withSuccess и т. Д.).
Существует также метод matchPattern(шаблон java.util.regex.Pattern) в классе org / hamcrest / Matchers, который доступен начиная с Hamcrest 2, и его можно использовать для решения вашей проблемы.
Но в вашем проекте вы, вероятно, зависите от более старой версии Hamcrest (1.3), которая используется, например, junit 4.12, последним spring-boot-starter-test-2.13 или, наконец, org.mock-server.mockserver-netty.3.10.8 (транзитивно).
Итак, вам необходимо:
- Проверьте актуальную версию Hamcrest в своем проекте и (если это не 2+) обновите эту зависимость вручную: https://mvnrepository.com/artifact/org.hamcrest/hamcrest/2.1
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest</artifactId>
<version>2.1</version>
<scope>test</scope>
</dependency>
- Обновите свой тест:
mockServer.expect(requestTo(matchesPattern(".*exact-example-url.com.*")))
.andExpect(method(HttpMethod.GET))
.andRespond(withSuccess("response", MediaType.APPLICATION_JSON));