前言
今天写项目UT的时候遇到需要根据同一个方法多次执行根据参数不同来mock不同的返回值,找到解决方案,于此记录。
一、场景
相同的方法根据参数不同来mock不同的返回值 Date maxDate = summaryMapper.getMaxDATE(condition, "MONTH");Date maxDate = summaryMapper.getMaxDATE(condition, "WEEK");Date maxDate = summaryMapper.getMaxDATE(condition, "DAY");
这里原代码是根据三个相同的方法不同的日期type找出最大的日期,写UT的话则需要对此方法mock三个相应的返回值。
二、代码示例
这里我是用的是Mockito中的Answer,根据参数列表里面传的值来确定返回值,参数列表下标从0开始。
when(summaryMapper.getMaxDATE(anyString(), anyString())).thenAnswer(mock -> {
if ("MONTH".equals(mock.getArgument(1))) {
return this.addDate(new Date(), -2);
}
if ("WEEK".equals(mock.getArgument(1))) {
return this.addDate(new Date(), -3);
}
if ("DAY".equals(mock.getArgument(1))) {
return this.addDate(new Date(), -3);
}
return null;
});
总结
问题看似简单,但是找到解决方案的过程是费时费力的,有用的话点个赞再走。