# 简介
本文将演示如何在以下约束条件下对 Feign
客户端进行测试:
- 没有降级处理的
Feign
客户端 - 挡板测试需要通过
- 应用本身需要能顺利启动
# 适用场景
- 依赖的第三方服务在公网无法访问, 需要模拟第三方服务的响应与行为.
- 依赖的第三方服务会消耗真实的资源, 需要模拟第三方服务的响应与行为.
# 定义一个 Feign 客户端:
/src/main/dev/dengchao/SearchEngineForStubTest.java
:
@Primary
@FeignClient(value = "search-engine-for-stub-test", url = "https://cn.bing.com", primary = false)
interface SearchEngineForStubTest {
@GetMapping("/")
String index();
}
# 定义一个挡板
/src/test/dev/dengchao/SearchEngineStub.java
:
@Primary
@Component
class SearchEngineStub implements SearchEngineForStubTest {
@Override
public String index() {
return "Stub invoked";
}
}
# 编写挡板测试
/src/test/dev/dengchao/SearchEngineStubTests.java
:
@SpringBootTest
public class SearchEngineStubTests {
@Autowired
private SearchEngineForStubTest searchEngineForStubTest;
@Test
void test() {
Assertions.assertTrue(searchEngineForStubTest instanceof SearchEngineStub);
Assertions.assertEquals("Stub invoked", searchEngineForStubTest.index());
}
}
# 小结
对 Feign
客户端进行挡板测试需要注意以下几点:
- 正式环境里的客户端需要将
@FeignClient
注解的primary
属性设置为false
- 测试环境里需要将挡板用
@Primary
进行注解
否则会在运行测试的过程中出现依赖冲突或找不到合适地依赖的情况.
相关代码已发布至 GitHub: Spring Cloud OpenFeign Test Demo (opens new window)
# 推广
- 如何对 Feign 客户端进行单元测试 (Unit Test)
- 如何对 Feign 客户端的降级处理进行单元测试 (Unit Test)
- 如何对 Feign 客户端的降级处理进行挡板测试 (Stub Test)
欢迎加入 Spring Cloud 交流群: 617143034 (opens new window)
欢迎大家点击下方的图片领取限量 阿里云优惠券 (opens new window), 新购续费更优惠: (opens new window)