【问题标题】:Spring MockRestServiceServer handling multiple Async requestsSpring MockRestServiceServer 处理多个异步请求
【发布时间】:2018-05-27 08:44:31
【问题描述】:

我有一个编排器 Spring Boot 服务,它向外部服务发出多个异步休息请求,我想模拟这些服务的响应。

我的代码是:

 mockServer.expect(requestTo("http://localhost/retrieveBook/book1"))
    .andExpect(method(HttpMethod.GET))
    .andRespond(MockRestResponseCreators.withStatus(HttpStatus.OK)
        .body("{\"book\":{\"title\":\"xxx\",\"year\":\"2000\"}}")
            .contentType(MediaType.APPLICATION_JSON));

mockServer.expect(requestTo("http://localhost/retrieveFilm/film1"))
    .andExpect(method(HttpMethod.GET))
    .andRespond(MockRestResponseCreators.withStatus(HttpStatus.OK)
        .body("{\"film\":{\"title\":\"yyy\",\"year\":\"1900\"}}")
            .contentType(MediaType.APPLICATION_JSON));

service.retrieveBookAndFilm(book1,film1);
        mockServer.verify();

retrieveBookAndFilm 服务异步调用两个方法,一个是检索书,另一个是检索电影,问题是有时首先执行电影服务,我得到一个错误:

java.util.concurrent.ExecutionException: java.lang.AssertionError: Request URI expected:http://localhost/retrieveBook/book1 but was:http://localhost/retrieveFilm/film1

知道如何解决这个问题,有没有类似于 mockito 的东西来说明这个 url 何时执行然后返回这个或那个?

谢谢 问候

【问题讨论】:

    标签: spring-boot junit mockserver


    【解决方案1】:

    我遇到了同样的问题,发现它是由两件事引起的

    1. 默认的 MockRestServiceServer 会按照您定义的顺序接收请求。你可以像这样创建你的 MockRestServiceServer 来解决这个问题:

    MockRestServiceServer.bindTo(restTemplate).ignoreExpectOrder(true).build()

    1. (可能)为了两次使用相同的 URI,请使用 mockServer.expect(ExpectedCount.manyTimes(), RequestMatcher) 方法来构建您的响应。

    mockServer.expect(ExpectedCount.manyTimes(), MockRestRequestMatchers.requestTo(myUrl)) .andExpect(MockRestRequestMatchers.method(HttpMethod.GET)) .andRespond(createResponse())

    我通过组合这两个可能提供更多信息的其他答案找到了解决方案。

    How to use MockRestServiceServer with multiple URLs?

    Spring MockRestServiceServer handling multiple requests to the same URI (auto-discovery)

    【讨论】:

    • 非常感谢MockRestServiceServer.bindTo(restTemplate).ignoreExpectOrder(true).build() 的这个提示 - 它帮助很大!
    猜你喜欢
    • 2019-03-26
    • 2015-08-23
    • 1970-01-01
    • 2015-02-22
    • 1970-01-01
    • 2018-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多