单元测试部分知识点

(1)同一方法相同参数返回不同的结果
格式:when(模拟对象.模拟方法(模拟参数)).thenReturn(模拟结果1).thenReturn(模拟结果2);
when(keycloakRestTemplate.postForObject(anyString(), any(JSONObject.class), any(Class.class))).thenReturn(licenseJsonObject).thenReturn(successJSONObject);
(2)设置某一方法抛出异常
格式:doThrow(异常).when(模拟对象).模拟对象的方法(参数列表);

这条语句是专门用于测试try{}catch(){}语句的catch分支的,当系统执行到这条语句里对应的模拟对象+模拟方法后,会自动抛出指定的异常。

doThrow(new RunTimeException("统计数量失败")).when(keycloakRestTemplate).getForObject(anyString(), any(Class.class));
(3)统计方法的执行次数
格式:verify(模拟对象, times(模拟方法的预期执行次数)).模拟方法(参数列表);

这句断言是专门为返回值为void的被测试方法准备的。因为方法的返回值为void,所以,是找不到预期结果的。这时,挑出方法里的某一语句,看它是不是执行预期的次数,以此判定单元测试能否通过。但是注意:如果在某个节点处使用了reset()函数,这个节点之前的该方法的执行次数就被清零了。

verify(stuService, times(1)).getStudentById(any());
(4)any()/anyString()的区别

模拟参数:String userId,这时候用anyString()
模拟参数:user.getId(),这时候用any()

(5)以后碰到再更新

你可能感兴趣的:(单元测试,java)