Java тест на request
Стоит задача: при выполнении команды в 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: [ ]
Тест не проходит, потому что не может перехватить запрос. Хотя он на деле проходит. Как то надо точно указать синтаксически , что любой запрос
Ответы (1 шт):
Автор решения: versetty777
→ Ссылка
Тут лучше взять библиотеку 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(".*")));
}