【问题标题】:Stub for Feign client for integration testing用于集成测试的 Feign 客户端存根
【发布时间】:2018-10-02 23:34:10
【问题描述】:

我有一个spring cloud项目,打包结构如下

Controller(发布 Rest Endpoint)-->flow(业务逻辑)-->service(使用 hysterix fallback setup 调用 Feign 客户端)--> Feign 客户端。

自动装配在各个类中完成,例如流在控制器中自动连接,服务在流中自动连接等等。

我想通过调用控制器发布的端点来执行集成测试。问题是我目前没有 feign 客户端访问的端点(原始和 spring 云合同存根都不可用)。

在这种情况下,我如何 stub feign 客户端的调用。

【问题讨论】:

  • 你找到解决办法了吗?

标签: spring-boot integration-testing spring-cloud wiremock spring-cloud-feign


【解决方案1】:

您可以使用 Spring Cloud WireMock 支持并在调用测试之前手动设置端点。在 feign 配置中,您可以手动指向 IP 和端口。问题是这个测试几乎没有用,因为作为消费者你在嘲笑生产者。

更新

您有一个 Feign 客户端,它将用于调用一些外部 API。您可以做的是您可以使用 Spring Cloud WireMock(或只是 WireMock)来设置该 API 的模拟。然后,您可以教 WireMock 按您的意愿行事,并断言您的客户端是否正常工作。这种方法的问题在于,由于您作为客户端正在设置 WireMock 实例,因此您可以教它以与实际 API 无关的方式运行。例如,您声明如果您使用 GET 方法向端点 /foo 发送请求,那么您应该在响应中返回“BAR”。然后您编写一个测试,您的客户端发送 GET @ /foo 并断言 BAR 已正确返回。但是,这并不意味着其他 API 确实具有该端点。所以这种方法会给你带来误报。但是,您可以使用 WireMock 来断言您是否可以正确响应错误响应,例如格式错误的响应等。

在这种情况下,如果您真的想检查是否可以与您无法控制的 API 正常通信,您是否可以编写测试,通过 WireMock 代理调用该真实 API,您记录该流量并将其转换为存根。您可以在这里https://www.youtube.com/watch?v=ZyHG-VOzPZg@

的演示文稿中观看更多内容

【讨论】:

  • 你能详细说明一下吗。我正在努力使用 Spring Boot 为我的 FeignClient 进行集成测试。谢谢!
  • 感谢 Marcin 的更新。我也在考虑怎么做测试。你能推荐我参考如何在没有模拟的情况下进行端到端测试
  • 你可以阅读 spring cloud 合约文档cloud.spring.io/spring-cloud-static/spring-cloud-contract/… 那里都有描述。我们可以将此标记为已回答吗?
  • 感谢您的链接。我无法将其标记为已回答,因为该选项不可见
猜你喜欢
  • 2018-06-01
  • 2021-09-27
  • 2019-10-14
  • 2013-12-07
  • 2018-04-19
  • 1970-01-01
  • 2016-03-27
  • 2020-03-26
  • 2019-01-25
相关资源
最近更新 更多