一、需求
? ? ? ?在微服務框架模式下,往往需要在外部服務沒有準備好的情況下進行測試。本文主要是討論在SpringCloud體系下,以FeignClient進行通信時,對其進行mock的方式。
二、調用模型
微服務B通過FeignClient依賴其他服務調用。
三、構建方式
3.1)構建基礎測試類
@RunWith(SpringRunner.class)
@ActiveProfiles(profiles = {"dev"})
@SpringBootTest(classes = BaseTest.class)
@ComponentScan("com.csdn.service")
@WebAppConfiguration
@AutoConfigureMockMvc
public class BaseTest {
}
3.2)Mock FeignClient
public class ServiceTest extends BaseTest {
@Resource
private ServiceB serviceB;
private ServiceFeign serviceFeign;
private String email;
@Before
public void setup() throws NoSuchFieldException, IllegalAccessException {
this.email = "mock@hupspot.com";
serviceFeign = Mockito.mock(ServiceFeign.class);
Field agentFeignClient = ServiceB.class.getDeclaredField("serviceFeign");
agentFeignClient.setAccessible(true);
agentFeignClient.set(serviceB, this.serviceFeign);
CommonResult<Objejct> res = CommonResult.success(new Object());
Mockito.when(serviceFeign.query(this.email)).thenReturn(res);
}
@Test
public void remoteFuncTest() {
String res = serviceFeign.remoteFunc(this.email);
Assert.assertEquals(String.join("_", this.email, this.email), res);
System.out.println("res=" + res);
}
}
主要就是初始化feignClient的方式(僅僅mock是沒法注入到ServiceB中并生效的):
Field agentFeignClient = ServiceB.class.getDeclaredField("serviceFeign");
agentFeignClient.setAccessible(true);
agentFeignClient.set(serviceB, this.serviceFeign);文章來源:http://www.zghlxwxcb.cn/news/detail-520164.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-520164.html
到了這里,關于【Testing】基于Mockito的FeignClient單元測試的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!