Как ожидать requestTo по шаблону String в MockRestServiceServer? - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть тесты с:

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.*")) по шаблону String?

1 Ответ

0 голосов
/ 20 февраля 2019

Я полагаю, что "any" на самом деле является методом Mockito.any ()?В этом случае вы можете использовать Mockito.matches ("regex").См. Документы: https://static.javadoc.io/org.mockito/mockito-core/1.9.5/org/mockito/Matchers.html#matches(java.lang.String)


РЕДАКТИРОВАТЬ: Оказывается, что 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 (транзитивно).

Итак, вам необходимо:

  1. Проверьте актуальную версию 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));
...