我正在使用MockRestServiceServer在我的REST控制器上编写某种集成测试来模拟后端行为。我现在试图实现的是模拟来自后端的非常慢的响应,这最终会导致我的应用程序超时。它似乎可以用WireMock实现,但目前我想坚持使用MockRestServiceServer。
我像这样创建服务器:
myMock = MockRestServiceServer.createServer(asyncRestTemplate);然后我会模仿我的后端行为,比如:
myMock.expect(requestTo("http://myfakeurl.blabla"))
.andExpect(method(HttpMethod.GET))
.andRespond(withSuccess(myJsonResponse, MediaType.APPLICATION_JSON));是否有可能在响应中添加某种延迟、超时或其他类型的延迟(或者可能是整个模拟服务器,甚至是我的asyncRestTemplate)?或者我应该直接切换到WireMock或者是Restito?
发布于 2016-07-12 22:01:15
您可以这样实现此测试功能(Java 8):
myMock
.expect(requestTo("http://myfakeurl.blabla"))
.andExpect(method(HttpMethod.GET))
.andRespond(request -> {
try {
Thread.sleep(TimeUnit.SECONDS.toMillis(1));
} catch (InterruptedException ignored) {}
return new MockClientHttpResponse(myJsonResponse, HttpStatus.OK);
});但是,我应该警告你,由于MockRestServiceServer只是替换了RestTemplate requestFactory,所以你所做的任何requestFactory设置都将在测试环境中丢失。
发布于 2018-12-18 16:50:35
如果您在http客户端中控制超时,例如使用1秒,则可以使用mock server delay
new MockServerClient("localhost", 1080)
.when(
request()
.withPath("/some/path")
)
.respond(
response()
.withBody("some_response_body")
.withDelay(TimeUnit.SECONDS, 10)
);如果您想要在模拟服务器中断开连接,请使用mock server error action
new MockServerClient("localhost", 1080)
.when(
request()
.withPath("/some/path")
)
.error(
error()
.withDropConnection(true)
);发布于 2016-08-09 02:51:34
可以采用的方法:使用类路径资源或普通字符串内容指定响应体。Skeeve上面建议的更详细的版本
.andRespond(request -> {
try {
Thread.sleep(TimeUnit.SECONDS.toMillis(5)); // Delay
} catch (InterruptedException ignored) {}
return withStatus(OK).body(responseBody).contentType(MediaType.APPLICATION_JSON).createResponse(request);
});https://stackoverflow.com/questions/37076113
复制相似问题