我有一个orchestrator 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:预期的请求URI:http://localhost/retrieveBook/book1但是:http://localhost/retrieveFilm/film1
任何想法我怎么能解决这个问题,有什么类似于mockito说这个url被执行然后返回这个或那个?
由于 此致
答案 0 :(得分:5)
我遇到了同样的问题,发现它是由两件事造成的
MockRestServiceServer.bindTo(restTemplate).ignoreExpectOrder(true).build()
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)