Нашел неплохой вариант для стаббинга HTTP-сервера, позволяющий автоматизировать тестирование HTTP-клиентов. Называется сабж Wiremock, имеет неплохую документацию с примерами. Есть в репозитории мавена и подключается к проекту так:
<dependency> <groupId>com.github.tomakehurst</groupId> <artifactId>wiremock</artifactId> <version>1.30</version> <scope>test</scope> </dependency>
Использовать его просто (по крайней мере, в тривиальных тестах), ниже приведен пример теста, проверяющего реакцию некоторого тестируемого класса на коды ответа HTTP-сервера 200 и 404:
import static com.github.tomakehurst.wiremock.client.WireMock.*;
...
private static final int STUB_PORT = 17777;
@Rule
public WireMockRule wireMockRule = new WireMockRule(STUB_PORT);
@Test
void someTest() {
stubFor(get(urlEqualTo("/200"))
.willReturn(aResponse()
.withStatus(200)
.withHeader("Content-Type", "text/html")
.withBody("200 OK")));
// дальше некий код, запрашивающий "http://localhost:"+STUB_PORT+"/200"
stubFor(get(urlEqualTo("/404"))
.willReturn(aResponse()
.withStatus(404)
.withHeader("Content-Type", "text/html")
.withBody("404 Not Found")));
// дальше некий код, запрашивающий "http://localhost:"+STUB_PORT+"/404"
}
Проект правда неидеален, например, проверить basic-аутентификацию у меня так не получилось, метод verify почему-то игнорирует требование наличия заголовка "Authorization". Хотя я, честно говоря, особо не заморачивался с этой проблемой, возможно она решаема и без копания в исходниках Wiremock`а (которые, кстати, доступны на гитхабе: https://github.com/tomakehurst/wiremock).
Комментариев нет:
Отправить комментарий