Я использую wiremock, чтобы имитировать ответ внешнего оператора в интеграционном тесте:
@ClassRule
public static WireMockClassRule zainWireMockStatic = new WireMockClassRule(9900);
и получить это исключение
requesting to java.net.SocketTimeoutException: connect timed out timed out
это мой проволочный макет
private static void wireMockZainUnSubscriptionRequest() {
zainWireMockStatic.stubFor(get(urlPathMatching("/api/unsubscribe")).willReturn(
aResponse().withStatus(200).withHeader("Content-Type", "application/json")
.withBody(FileUtils.readFileFromClasspath(
"data/mocks/zain_unsubscribe_success_response.json"))));
}
и это мой тест
@Test
public void unsubscribeUserWithSuccessResponse() {
wireMockZainUnSubscriptionRequest();
given().body(FileUtils.readFileFromClasspath("data/message/unsubscribe_request.json"))
.contentType(ContentType.JSON).post(UNSUBSCRIBE_API).then().statusCode(200)
.body("user_id", equalTo(USER_ID));
}




Проблема в том, что бегун Spring Boot запускает и останавливает свой контейнер сервлета один раз для класс. Если вы используете правило WireMock, оно запускается и останавливается один раз для Метод испытания. Это означает, что объединенные в пул соединения в приложении Spring становятся недействительными между тестовыми примерами.
У вас есть три варианта исправить это:
Привет, у меня была такая же проблема, и я последовал совету Бернифокс на гитхабе и решил проблему.
Моя проблема была с http-клиентом, который сообщает SocketTimeout. Предлагаемое решение состоит в том, чтобы сообщить httpclient, что соединение будет закрыто с расширением.
Я сделал это:
public class ConnectionCloseExtension extends ResponseTransformer {
@Override
public ResponseDefinition transform(Request request, ResponseDefinition response, FileSource files) {
HttpHeaders headersWithClose;
HttpHeader closeHeader = new HttpHeader("Connection", "Close");
if (response.getHeaders()!=null){
headersWithClose = HttpHeaders.copyOf(response.getHeaders())
.plus(closeHeader);
}else{
headersWithClose = new HttpHeaders(closeHeader);
}
response.setHeaders(headersWithClose);
return response;
}
@Override
public String name() {
return "ConnectionCloseExtension";
} }
и применить его:
@Rule
public WireMockRule wireMockServer = new WireMockRule(wireMockConfig()
.extensions(new ConnectionCloseExtension()));