我正在使用 MockRestServiceServer 在我的 REST Controller 上编写某种集成测试来模拟后端行为。 我现在想要实现的是模拟来自后端的非常慢的响应,这最终会导致我的应用程序超时。似乎可以使用 WireMock 实现,但目前我想坚持使用 MockRestServiceServer。
我正在创建这样的服务器:
myMock = MockRestServiceServer.createServer(asyncRestTemplate);
然后我在 mock 我的后端行为:
myMock.expect(requestTo("http://myfakeurl.blabla"))
.andExpect(method(HttpMethod.GET))
.andRespond(withSuccess(myJsonResponse, MediaType.APPLICATION_JSON));
是否可以为响应添加某种延迟或超时或其他类型的延迟(或者可能是整个模拟服务器,甚至是我的 asyncRestTemplate)?或者我应该切换到 WireMock 还是 Restito?
最佳答案
您可以通过这种方式实现此测试功能(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 设置都将在测试环境中丢失。
关于java - MockRestServiceServer 在集成测试中模拟后端超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37076113/