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 - jaxb2-maven-plugin 通过命名空间创建包

java - 何时使用 extends 或 Implements Comparable (Java) ? + 为什么我无法创建对象

java - 无法更改 JTable 标题背景颜色

java - REST POST Api 是否会像 Get Api 一样由浏览器自动重试?

api - 如何在 TeamCity 中的特定构建上添加网络 Hook

api - PUT 请求可以更改 URL 吗?

java - 在 Spring Controller 中声明互参数

java - 在 Spring Boot 中增加 Tomcat 的连接超时

java - 如何在 spring java 配置中设置日志记录属性?

java - 如何在 IntelliJ 中运行导入的 Spring 项目