java - 使用 MockRestServiceServer 模拟 REST 调用

标签 java spring rest junit

我正在尝试编写一个 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/

相关文章:

java - Eclipse Tomcat 不更新

mysql - Spring Boot Hibernate ManyToMany Relation 使用嵌入式模型

javascript - MongoDB 中关于设计 Shift 模式的疑问

java - 使用 JRE 路径设置 Eclipse

java - 如何生成具有继承权限的进程

Spring Boot - Hibernate 自定义约束不注入(inject)服务

java - Jersey:如何将 MediaType 设置为 javax.ws.rs.core.Response,如果真实的 "physical"响应 header 没有任何相关信息

jquery - 对 WCF restful 服务的 Json 调用(jquery)总是运行错误函数

java - 构建 Maven jar 不起作用

java - : resource is not available Glassfish 4. 0 JAX-RS 2.0 的 REST 服务错误