使用Mockito 对方法中的私有void方法,以及本类中的公共方法
这里用一段代码举例
public void ruleJudgement(Long tenantId, Long productId, Long equipId, List<ModelAttributeValue> modelAttributeValues, List<EquipReportValue> equipReportValues) {
//这里是一些正常的方法
// 这个是需要moke的私有方法
executeAction(ruleId);
//这个是需要moke的本类公共方法
SysDictTypeVO dictType = selectDictTypeById(dictId);
}
}
public SysDictTypeVO selectDictTypeById(Long dictId) {
//正常业务
}
private void executeAction(Long ruleId) {
//又一个私有方法
setFunctionRecordJson(modelFunctionRecord, rule.getDeptId());
}
private void setFunctionRecordJson(ModelFunctionRecord functionRecord, Long tenantId) {
//正常业务
}
下面就是test测试方法
@Test
public void ruleJudgementTest() throws Exception{
//RuleJudgmentServiceImpl这个是你自己moke的那个类的名字
RuleJudgmentServiceImpl spy = PowerMockito.spy(ruleJudgmentService);
//这个是你moke的那个公共方法
spy.ruleJudgement(11L,12L,13L,list,valueList);
//第一个参数是你的私有方法名字,第二个参数就是你私有方法的参数
PowerMockito.verifyPrivate(spy).invoke("setFunctionRecordJson",modelFunctionRecord,789L);
PowerMockito.verifyPrivate(spy).invoke("executeAction",123L);
//创建返回值需要的参数
SysDictTypeVO sysDictTypeVO = new SysDictTypeVO();
sysDictTypeVO.setDictType("1");
//第一个参数是你方法的返回类型,第二个参数是上面创建的moke类别名,然后就是方法名跟上参数
Mockito.doReturn(sysDictTypeVO).when(spy).selectDictTypeById(anyLong());
}