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

  • Post author:
  • Post category:其他



在这里插入图片描述

欢迎加入 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

欢迎大家使用

阿里云优惠券

, 新购续费更优惠:


限量阿里云优惠券



版权声明:本文为XieEDeHeiShou原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。