java - 当您无法控制 RestTemplate 何时构建时,如何模拟 Spring 中 Rest 调用的响应

标签 java spring integration-testing

我想使用 MockRestServiceServer 为休息方法编写集成级别测试。我的休息方法是一个代理,它最终通过静态帮助器方法创建一个休息模板并将请求代理给第三方。我想模拟那个第三方。实际上,对具有不同配置的不同方进行了两次不同的休息调用来服务该请求。

我想使用 MockRestServiceServer,但它希望我传入在我的集成测试中构建的restTemplate。我可以尝试使用模拟来确保使用我自己的restTemplate,但现在我必须引入4个新的maven包并编写一些代码来安全地进行注入(inject),并确保两个使用不同的restTemplate我的代理执行不同的外部服务调用。它还要求我对我的代码有一点了解,从而使我的集成​​测试不再像我希望的那样是黑匣子。

是否有更干净的方式来模拟服务?我知道我的方法可行,但感觉太麻烦了。有没有办法模拟这个而不必提前注入(inject) RestTemplate?

最佳答案

如果您不想重新设计创建 RestTemplate 实例的部分,那么您可以参数化外部服务的地址并使用 Wiremock 等工具模拟整个外部服务。

使用 Wiremock,您实际上可以在特定端口上运行嵌入式 HTTP 服务器。您还可以告诉 Wiremock 在发出预定义请求时返回指定的响应。它基本上只是一个模拟,但是通过 HTTP。

这样,您将获得良好的集成测试,不仅可以测试典型的 Java 代码,还可以测试整个通信(例如 JSON(反)序列化)。我在工作中广泛使用 Wiremock(及相关),它们确实很有魅力。

关于java - 当您无法控制 RestTemplate 何时构建时,如何模拟 Spring 中 Rest 调用的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32279380/

相关文章:

java - 将函数传递给 JavaPairRDD<K,V> 中的 KEY

java - 所有 Spring Framework Java 配置注入(inject)示例都有问题吗?

java - Testcontainers - 在实例化期间不要自动启动容器

java - 多线程中elasticsearch插入时如何保证唯一性?

java - 对列表使用删除和添加方法

java - native 查询仅在 H2 数据库中导致错误

java - Arquillian 测试中的 Persistence.xml 被覆盖

wpf - 在不同项目类型的 Visual Studio 中进行集成测试

java - 向上按钮退出应用程序?

java - 如何将数据源 url 查询参数添加为 application.properties?