首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MockRestServiceServer在集成测试中模拟后端超时

MockRestServiceServer在集成测试中模拟后端超时
EN

Stack Overflow用户
提问于 2016-05-06 23:26:15
回答 5查看 16.4K关注 0票数 21

我正在使用MockRestServiceServer在我的REST控制器上编写某种集成测试来模拟后端行为。我现在试图实现的是模拟来自后端的非常慢的响应,这最终会导致我的应用程序超时。它似乎可以用WireMock实现,但目前我想坚持使用MockRestServiceServer。

我像这样创建服务器:

代码语言:javascript
复制
myMock = MockRestServiceServer.createServer(asyncRestTemplate);

然后我会模仿我的后端行为,比如:

代码语言:javascript
复制
myMock.expect(requestTo("http://myfakeurl.blabla"))
            .andExpect(method(HttpMethod.GET))
            .andRespond(withSuccess(myJsonResponse, MediaType.APPLICATION_JSON));

是否有可能在响应中添加某种延迟、超时或其他类型的延迟(或者可能是整个模拟服务器,甚至是我的asyncRestTemplate)?或者我应该直接切换到WireMock或者是Restito?

EN

回答 5

Stack Overflow用户

发布于 2016-07-12 22:01:15

您可以这样实现此测试功能(Java 8):

代码语言:javascript
复制
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设置都将在测试环境中丢失。

票数 18
EN

Stack Overflow用户

发布于 2018-12-18 16:50:35

如果您在http客户端中控制超时,例如使用1秒,则可以使用mock server delay

代码语言:javascript
复制
new MockServerClient("localhost", 1080)
.when(
    request()
        .withPath("/some/path")
)
.respond(
    response()
        .withBody("some_response_body")
        .withDelay(TimeUnit.SECONDS, 10)
);

如果您想要在模拟服务器中断开连接,请使用mock server error action

代码语言:javascript
复制
new MockServerClient("localhost", 1080)
.when(
    request()
        .withPath("/some/path")
)
.error(
    error()
        .withDropConnection(true)
);
票数 6
EN

Stack Overflow用户

发布于 2016-08-09 02:51:34

可以采用的方法:使用类路径资源或普通字符串内容指定响应体。Skeeve上面建议的更详细的版本

代码语言:javascript
复制
.andRespond(request -> {
            try {
                Thread.sleep(TimeUnit.SECONDS.toMillis(5)); // Delay
            } catch (InterruptedException ignored) {}
            return withStatus(OK).body(responseBody).contentType(MediaType.APPLICATION_JSON).createResponse(request);
        });
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37076113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档