# 简介
本文将演示如何在以下约束条件下对 Feign
客户端进行测试:
- 有降级处理的
Feign
客户端 - 单元测试需要通过
- 应用本身需要能顺利启动
# 适用场景
- 被依赖的第三方服务响应时间不稳定, 需要将部分请求降级处理以免拖垮己方服务.
- 被依赖的第三方服务在不可用时有替代方案.
# 定义一个 Feign 客户端:
/src/main/dev/dengchao/SearchEngineWithFallbackForUnitTest.java
:
@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.java
:
@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 (opens new window)
# 推广
- 如何对 Feign 客户端进行单元测试 (Unit Test)
- 如何对 Feign 客户端进行挡板测试 (Stub Test)
- 如何对有降级处理的 Feign 客户端进行挡板测试 (Stub Test)
欢迎加入 Spring Cloud 交流群: 617143034 (opens new window)
欢迎大家点击下方的图片领取限量 阿里云优惠券 (opens new window), 新购续费更优惠: (opens new window)