欢迎加入 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
推广
-
如何对 Feign 客户端进行单元测试 (Unit Test)
-
如何对 Feign 客户端进行挡板测试 (Stub Test)
-
如何对有降级处理的 Feign 客户端进行挡板测试 (Stub Test)
欢迎加入 Spring Cloud 交流群:
617143034
欢迎大家使用
阿里云优惠券
, 新购续费更优惠:
版权声明:本文为XieEDeHeiShou原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。