使用 SpringBoot 配置文件模拟 REST API 调用
Posted
技术标签:
【中文标题】使用 SpringBoot 配置文件模拟 REST API 调用【英文标题】:Mocking REST API calls with SpringBoot profiles 【发布时间】:2020-05-22 17:27:57 【问题描述】:我最近开始使用 Spring,不确定如何解决这个问题。我有一个调用远程 REST API 的 Spring 引导程序。例如带有getAddress(String user)
方法的AddressService
类,它进行HTTP 调用并返回JSON 响应。我想为开发目的设置 Spring 配置文件local
、dev
、uat
、prod
。
当程序使用local
配置文件运行时,我想用预期的 JSON 响应“模拟”这些外部 API 调用,所以我可以测试逻辑,但是当它在任何其他配置文件中运行时我想拨打实际电话。我该怎么做呢?根据我的阅读,人们有很多方法可以解决这个问题,使用WireMock
、RestTemplate
、Mockito
等。我很困惑哪条路该走。
任何建议将不胜感激。谢谢。
【问题讨论】:
【参考方案1】:WireMock,Mockit 用于单元测试,模拟真实的请求。这里的例子: How do I mock a REST template exchange?
当你需要一个带有模拟的运行实现时,我认为最简单的方法是你有一个接口
public interface AdressAdapter
public List<Adress> getAddress(String name);
还有两种不同的实现,具体取决于配置文件。
@Profile("local")
public class DummyAdress implements AdressAdapter
@Override
public List<Adress> getAddress(String name)
//Mock here something
return null;
!在这种情况下表示 NOT 语言环境配置文件。
@Profile("!local")
public class RealAdress implements AdressAdapter
@Override
public List<Adress> getAddress(String name)
//Make Restcall
return null;
【讨论】:
【参考方案2】:您可以根据您的个人资料使用不同的application.properties
文件。这样,您只需将 url 更改为 local
配置文件的模拟服务器。
所以你要做的是:
-
在您的
resources
文件夹中创建另一个application.properties,命名为:application-local.properties
。
更改所需服务的网址。
使用 VM 选项 -Dspring.profiles.active=local
启动您的应用程序。
这是一个link,它很好地描述了您想要实现的目标。
对于您的模拟服务器,您可以使用 Wiremock、Mountebank、Postman、... 可以单独启动并模拟特定端点以返回您想要的。
【讨论】:
以上是关于使用 SpringBoot 配置文件模拟 REST API 调用的主要内容,如果未能解决你的问题,请参考以下文章
springboot项目使用WireMock伪造REST服务
Spring Boot - 模拟对外部 API 的 POST REST 请求
SpringBoot中使用rabbitmq,activemq消息队列和rest服务的调用