![](/img/trans.png)
[英]Spring boot java.net.SocketTimeoutException while uploading large files
[英]java.net.SocketTimeoutException in integration test in Java while using Wiremock using Spring Boot with Junit
我正在使用Wiremock來模擬集成測試中的外部操作員響應:
@ClassRule
public static WireMockClassRule zainWireMockStatic = new WireMockClassRule(9900);
並得到這個例外
requesting to java.net.SocketTimeoutException: connect timed out timed out
這是我的wiremock
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運行器每個類一次啟動和停止其servlet容器。 如果使用WireMock規則,則每種測試方法都會啟動和停止一次規則。 這意味着在測試用例之間,Spring應用程序中的池化連接將變為無效。
您可以通過以下三種方法解決此問題:
嗨,我遇到了同樣的問題,我在github上遵循了bernyfox的建議並解決了這個問題。
我的問題是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()));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.