[Spring] [Feign] 如何对 Feign 客户端的降级处理进行单元测试 (Fallback, Unit Test)

在这里插入图片描述

欢迎加入 Spring Cloud 交流群: 617143034

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

简介

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

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

适用场景

  • 被依赖的第三方服务响应时间不稳定, 需要将部分请求降级处理以免拖垮己方服务.
  • 被依赖的第三方服务在不可用时有替代方案.

定义一个 Feign 客户端:

// /src/main/dev/dengchao/SearchEngineWithFallbackForUnitTest 
@FeignClient(value = "search-engine-with-fallback-for-unit-test", url = "http://localhost",
        fallback = SearchEngineWithFallbackForUnitTest.Fallback.class)
interface SearchEngineWithFallbackForUnitTest {

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

    @Component
    class Fallback implements SearchEngineWithFallbackForUnitTest {
    
        @Override
        public String index() {
            return "Fallback triggered";
        }
    }
}

编写单元测试

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

    @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
    @Autowired
    private SearchEngineWithFallbackForUnitTest searchEngineWithFallbackUnitTest;

    @Test
    void test() {
        assertFalse(searchEngineWithFallbackUnitTest instanceof SearchEngineWithFallbackForUnitTest.Fallback);
        assertEquals("Fallback triggered", searchEngineWithFallbackUnitTest.index());
    }
}

小结

对 Feign 客户端降级处理进行单元测试时需要注意以下几点:

  • IDEA 错误的认为 SearchEngineWithFallbackForUnitTest 的依赖注入会出现冲突, 但实际上并不会.
    需要使用 @SuppressWarnings 抑制注入 SearchEngineWithFallbackForUnitTest 对象时出现的警告.
  • 测试时需要对 Feign 客户端设置合适的降级触发条件, 比如 readTimeout .

相关代码已发布至 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、付费专栏及课程。

余额充值