我正在尝试编写一个 JUnit 测试用例来测试辅助类中的方法。该方法使用 REST 调用外部应用程序,我试图在 JUnit 测试中模拟的正是这个调用。
辅助方法使用 Spring 的 RestTemplate 进行 REST 调用。
在我的测试中,我创建了一个模拟 REST 服务器和模拟 REST 模板,并像这样实例化它们:
@Before
public void setUp() throws Exception {
mockServer = MockRestServiceServer.createServer(helperClass.getRestTemplate());
}
然后我为模拟服务器设置种子,以便它在辅助方法进行 REST 调用时返回适当的响应:
// response is some XML in a String
mockServer
.expect(MockRestRequestMatchers.requestTo(new URI(myURL)))
.andExpect(MockRestRequestMatchers.method(HttpMethod.GET))
.andRespond(MockRestResponseCreators.withStatus(HttpStatus.OK)
.contentType(MediaType.APPLICATION_XML)
.body(response));
当我运行我的测试时,辅助方法从它发出的 REST 调用中收到一个空响应,并且测试失败。
助手创建的 REST URL 具有查询参数,如下所示:“http://server:port/application/resource?queryparam1=value1&queryparam2=value2 ”。
我已经尝试将 URL(“http://server:port/application/resource”)与 和 一起放入“myURL”变量中而不带查询参数(以引发匹配以便它返回响应),但无法让模拟服务器返回任何内容。
我已经尝试搜索此类代码的示例,但尚未找到任何与我的场景相似的内容。
Spring 版本 4.1.7。
在此先感谢您的帮助。
最佳答案
当您创建 MockRestServiceServer
的实例时,您应该使用您的生产代码正在使用的 RestTemplate
的现有实例。因此,请尝试将 RestTemplate
注入(inject)到您的测试中,并在调用 MockRestServiceServer.createServer
时使用它 - 不要在您的测试中创建新的 RestTemplate
。
关于java - 使用 MockRestServiceServer 模拟 REST 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37781982/