Java тест на request

Рейтинг: -1Ответов: 1Опубликовано: 19.01.2023

Стоит задача: при выполнении команды в php файле идет загрузка на внешний сервис(гугл аналитику). Нужно написать java тест который будет ловить любой запрос к внешнему сервису. И если такой произошел - значит тест прошел. Как это сделать? Я пробовал использовать фреймворк MockServer, но к сожалению не нашел подходящего примера.
При попытке выполнения кода в следующем виде :

  @Rule
    public WireMockRule wireMockRule = new WireMockRule(8089);
//
    @Test
    public void testExternalServiceRequest() {
        System.out.println("11111");
        // Настройка заглушки на любой запрос
        wireMockRule.stubFor(any(urlMatching(".*")).willReturn(aResponse().withStatus(200)));
        System.out.println("22222");
        Http.execCommand(upload_VK_MBK);
        // Код для выполнения команды в php файле, который делает запрос к внешнему сервису
        System.out.println("33333");
        // Проверка, что запрос был отправлен
        wireMockRule.verify(postRequestedFor(urlMatching(".*")));
    }

Получаю результат

Expected at least one request matching: {
  "urlPattern" : ".*",
  "method" : "POST"
}
Requests received: [ ]

com.github.tomakehurst.wiremock.client.VerificationException: Expected at least one request matching: {
  "urlPattern" : ".*",
  "method" : "POST"
}
Requests received: [ ]  

Тест не проходит, потому что не может перехватить запрос. Хотя он на деле проходит. Как то надо точно указать синтаксически , что любой запрос

Ответы

▲ 0

Тут лучше взять библиотеку WireMock , она создаёт заглушку для внешнего сервиса в вашем тесте:

import static com.github.tomakehurst.wiremock.client.WireMock.*;

@Rule
public WireMockRule wireMockRule = new WireMockRule(8089);

@Test
public void testExternalServiceRequest() {
    // Настройка заглушки на любой запрос
    stubFor(any(urlMatching(".*")).willReturn(aResponse().withStatus(200)));

    // Код для выполнения команды в php файле, который делает запрос к внешнему сервису

    // Проверка, что запрос был отправлен
    verify(postRequestedFor(urlMatching(".*")));
}