当您无法控制 RestTemplate 的构建时间时,如何在 spring 中模拟 Rest 调用的响应
How to mock response of Rest call in spring when you can't controll when the RestTemplate is constructed
我想使用 MockRestServiceServer 为 rest 方法编写集成级别测试。我的休息方法是一个代理,它最终通过静态帮助方法创建一个 restTemplate 并将请求代理给第三方。我想嘲笑那个第三方。实际上,向具有不同配置的不同方发出了两个不同的休息调用来为请求提供服务。
我想使用 MockRestServiceServer,但它希望我传入在我的集成测试中构建的 restTemplate。我可以尝试使用模拟来确保使用我自己的 restTemplate,但现在我必须引入 4 个新的 maven 包并编写一些代码来安全地进行注入,并确保为这两个使用不同的 restTemplate不同的外部服务调用我的代理。它还要求我对我的代码有一点了解,从而使我的集成测试不像我希望的那样是一个黑盒子。
是否有更简洁的方法来模拟服务?我知道我的方法可行,但感觉过于繁琐。有没有一种方法可以在不必提前注入 RestTemplate 的情况下模拟它?
如果您不想重新设计创建 RestTemplate 实例的部分,那么您可以参数化外部服务的地址并使用 Wiremock 等工具模拟整个外部服务。
使用 Wiremock,您实际上 运行 特定端口上的嵌入式 HTTP 服务器。您还可以告诉 Wiremock 在发出预定义请求时 return 指定的响应。它基本上只是一个模拟,但通过 HTTP。
这样你会得到一个很好的集成测试,它不仅会测试你的典型 Java 代码,还会测试整个通信(比如 JSON(反)序列化)。我在工作中广泛使用 Wiremock(及相关),它们确实很有魅力。
我想使用 MockRestServiceServer 为 rest 方法编写集成级别测试。我的休息方法是一个代理,它最终通过静态帮助方法创建一个 restTemplate 并将请求代理给第三方。我想嘲笑那个第三方。实际上,向具有不同配置的不同方发出了两个不同的休息调用来为请求提供服务。
我想使用 MockRestServiceServer,但它希望我传入在我的集成测试中构建的 restTemplate。我可以尝试使用模拟来确保使用我自己的 restTemplate,但现在我必须引入 4 个新的 maven 包并编写一些代码来安全地进行注入,并确保为这两个使用不同的 restTemplate不同的外部服务调用我的代理。它还要求我对我的代码有一点了解,从而使我的集成测试不像我希望的那样是一个黑盒子。
是否有更简洁的方法来模拟服务?我知道我的方法可行,但感觉过于繁琐。有没有一种方法可以在不必提前注入 RestTemplate 的情况下模拟它?
如果您不想重新设计创建 RestTemplate 实例的部分,那么您可以参数化外部服务的地址并使用 Wiremock 等工具模拟整个外部服务。
使用 Wiremock,您实际上 运行 特定端口上的嵌入式 HTTP 服务器。您还可以告诉 Wiremock 在发出预定义请求时 return 指定的响应。它基本上只是一个模拟,但通过 HTTP。
这样你会得到一个很好的集成测试,它不仅会测试你的典型 Java 代码,还会测试整个通信(比如 JSON(反)序列化)。我在工作中广泛使用 Wiremock(及相关),它们确实很有魅力。