上次介绍了如何调用本地接口的MockMvc,这次分享的是如何使用MockBean模拟第三方接口的返回值。使用的技术为Mockito。
项目中需要添加依赖:
testImplementation 'org.springframework.boot:spring-boot-starter-test'
1、创建被测试的SparkService
package com.spark.mock.service;
import org.springframework.stereotype.Service;
@Service
public class SparkService {
public String getName(String pattern){
return "测试成功";
}
public String getName(String pattern1,String pattern2){
return "测试成功";
}
}
2、创建Controller
@PostMapping("/api/mockBean")
public String getMock(){
return sparkService.getName("wsl");
}
@PostMapping("/api/getMockMulParamters")
public String getMockMulParamters(){
return sparkService.getName("Spark","24");
}
3、写单元测试类
在单元测试类中引入需要被模拟的接口SparkService,并在上面添加注解
@MockBean
private SparkService sparkService;
创建测试方法分别模拟一个参数、多个参数、抛出异常三种情况。主要使用的依赖以及实现方式
import org.springframework.boot.test.mock.mockito.MockBean
import static org.mockito.ArgumentMatchers.eq
import static org.mockito.Mockito.when
when(sparkService.getName(eq("wsl"))).thenReturn("此处为模拟单个接口参数的返回结果");
测试方法
@MockBean
private SparkService sparkService;
创建测试方法分别模拟一个参数、多个参数、抛出异常三种情况。主要使用的依赖以及实现方式
import org.springframework.boot.test.mock.mockito.MockBean
import static org.mockito.ArgumentMatchers.eq
import static org.mockito.Mockito.when
when(sparkService.getName(eq("wsl"))).thenReturn("此处为模拟单个接口参数的返回结果");
@Test
public void getMock() throws Exception {
when(sparkService.getName(eq("wsl"))).thenReturn("此处为模拟单个接口参数的返回结果");
ResultActions perform = mvc.perform(post("/api/mockBean")
.contentType(MediaType.APPLICATION_JSON));
perform.andReturn().getResponse().setCharacterEncoding("UTF-8");
perform.andDo(print());
}
@Test
public void getMockException() throws Exception {
when(sparkService.getName(eq("Spark"),eq("24"))).thenReturn("此处为多个接口参数模拟抛出的异常");
ResultActions perform = mvc.perform(post("/api/getMockMulParamters")
.contentType(MediaType.APPLICATION_JSON));
perform.andReturn().getResponse().setCharacterEncoding("UTF-8");
perform.andDo(print());
}
@Test
public void getMockMulParamters() throws Exception {
when(sparkService.getName(eq("Spark"),eq("24"))).thenThrow(new Exception("此处为多个接口参数模拟抛出的异常"));
ResultActions perform = mvc.perform(post("/api/getMockMulParamters")
.contentType(MediaType.APPLICATION_JSON));
perform.andReturn().getResponse().setCharacterEncoding("UTF-8");
perform.andDo(print());
}
项目地址:https://gitee.com/goodwangboy/junit-test.git 上面介绍的方式可以帮助我们模拟未开发完成的接口,无权限的接口等等,不用等待接口提供方开发完成再去开发,大大提高开发效率。由于在开发过程中接口会出现发版,修改等不稳定的情况,使用这种MockBean的模拟接口调试开发方式,可以大大节省开发的调试时间。
欢迎关注公众号
|