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

标签 java spring mocking mockito mockmvc

我正在使用 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/

相关文章:

java - PostgreSQL 抛出 "Connection has been abandoned"-> "An I/O error occurred while sending to the backend"

php - 为什么 phpunit 不在模拟类中运行 __destruct() 以及如何强制运行它?

c# - 如何使用 Moq 验证多个方法调用

java - 如何将此Kotlin代码中的 “apply”转换为Java?

JavaFx:液体和固定网格 Pane 列宽

java - 如何在没有克隆开销的情况下获得集合/映射的固定状态迭代器

java - 将多个值传递给 AsyncTask 类

Spring-MVC:一个请求多个 Controller

android - 如何使用 Spring for Android POST 键/值对而不是 JSON 对象?

ruby-on-rails - 如何测试模块在被 Controller 类包含时是否向 before_filter 添加方法