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/

相关文章:

c# - WCF 聊天/游戏服务器 - 客户端关闭

java - 使用免费数据库和带有 Spring & Hibernate Web 应用程序的 Java 进行冗余数据库复制

java - Flex Java BlazeDS 仪表板——使用 Spring/JDBC 还是 Hibernate?

java - @JsonInclude(Include.NON_NULL) 不工作/ jackson 序列化空值

java - 如何在 PathMatchingResourcePatternResolver 上应用文件名模式?

java - 如何使用端点将事物列表分配给另一个事物列表

rest - Spark 流而不是 java REST API

java - 卸载 jdbc sql server 驱动程序

java - 如何将波形(用正弦波制成)从图片顶部移动到底部?

java - 我的 GWT 应用程序的 TinyMCE 或 SmartGWT 富文本编辑器?