[Spring] [Feign] 如何对有降级处理的 Feign 客户端进行挡板测试 (Fallback, Stub Test)

在这里插入图片描述

欢迎加入 Spring Cloud 交流群: 617143034

本博客站点已全量迁移至 DevDengChao 的博客 https://blog.dengchao.fun , 后续的新内容将优先在自建博客站进行发布, 欢迎大家访问.

简介

本文将演示如何在以下约束条件下对 Feign 客户端进行测试:

  • 有降级处理的 Feign 客户端
  • 需要通过挡板测试
  • 应用本身需要能顺利启动

适用场景

  • 依赖的第三方服务在公网无法访问, 需要模拟第三方服务的响应与行为.
  • 依赖的第三方服务会消耗真实的资源, 需要模拟第三方服务的响应与行为.

定义一个 Feign 客户端:

// /src/main/dev/dengchao/SearchEngineWithFallbackForStubTest 
@Priority(1)
@FeignClient(value = "search-engine-with-fallback-for-stub-test", url = "https://cn.bing.com", primary = false,
        fallback = SearchEngineWithFallbackForStubTest.Fallback.class)
interface SearchEngineWithFallbackForStubTest {

    @GetMapping("/")
    String index();

    @Component
    @Priority(2)
    class Fallback implements SearchEngineWithFallbackForStubTest {

        @Override
        public String index() {
            throw new RuntimeException("Fallback should not be triggered in this case");
        }
    }
}

定义一个挡板

// /src/test/dev/dengchao/SearchEngineWithFallbackStub.java
@Primary
@Component
class SearchEngineWithFallbackStub implements SearchEngineWithFallbackForStubTest {

    @Override
    public String index() {
        return "Stub invoked";
    }
}

编写挡板测试

// /src/test/dev/dengchao/SearchEngineWithFallbackStubTests 
@SpringBootTest
public class SearchEngineWithFallbackStubTests {

    @Autowired
    private SearchEngineWithFallbackForStubTest searchEngineWithFallbackStubTest;

    @Test
    void test() {
        Assertions.assertTrue(searchEngineWithFallbackStubTest instanceof SearchEngineWithFallbackStub);
        Assertions.assertEquals("Stub invoked", searchEngineWithFallbackStubTest.index());
    }
}

小结

对有降级处理的 Feign 客户端进行挡板测试时需要注意以下几点:

  • 正式环境里需要用 @Priority 注解调整 Feign 客户端与降级处理的优先级
  • 正式环境里的客户端需要将 @FeignClient 注解的 primary 属性设置为 false
  • 测试环境里需要将挡板用 @Primary 进行注解

否则会在运行测试的过程中出现依赖冲突或找不到合适的依赖的情况.

相关代码已发布至 GitHub: Spring Cloud OpenFeign Test Demo

推广

欢迎加入 Spring Cloud 交流群: 617143034

欢迎大家使用阿里云优惠券, 新购续费更优惠:
限量阿里云优惠券

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值