如何在controller做mockito单元测试,在controller 做代码覆盖率测试
·
直接上代码
要测试的controller
/**
* @description:
* @author: Edison
* @create: 2021-05-11 22:06
**/
@RestController
@RequestMapping("user")
public class UserController {
private static final Logger log= LoggerFactory.getLogger(UserController.class);
@Autowired
private UserBusiness userBusiness;
@PostMapping("/login")
public BaseResponse<UserDto> login(@RequestBody @Validated UserDto userDto , BindingResult result){
return userBusiness.login(userDto);
}
测试类
- 路径前要加斜杆否则会报错
java.lang.IllegalArgumentException: 'url' should start with a path or be a complete HTTP URL: user/login
/**
* @description:
* @author: Edison
* @create: 2021-08-31 23:18
**/
public class UserControllerTest {
@Autowired
private MockMvc mockMvc;
@InjectMocks
private UserController userController;
@Mock
private UserBusiness userBusiness;
@Before
public void setup() {
//初始化
MockitoAnnotations.initMocks(this);
//构建mvc环境
mockMvc = MockMvcBuilders.standaloneSetup(userController).build();
}
@Test
public void test() throws Exception{
String data = "{\n" +
"\t\"userName\": \"test\",\n" +
"\t\"password\": \"test\",\n" +
"\t\"userId\": 1\n" +
"}";
// 打桩
Mockito.when(userBusiness.login(Mockito.any())).thenReturn(new BaseResponse(StatusCode.Success));
// url
mockMvc.perform(MockMvcRequestBuilders.post("/user/login")
// 这里面还可以设置很多东西,比如加Header 等等
// 设置数据格式
.contentType(MediaType.APPLICATION_JSON_VALUE)
// 数据
.content(data)
).andExpect(status().isOk());
// 期望的结果,其实可以写得更具体
}
}
写的比较简单,测试框架里有很多API ,用的时候仔细看就行。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)