如何用Mockito模拟按引用传递的方法输出参数为预设值?
Mockito模拟void方法修改参数为预设值
要实现调用service.method()时将传入的Set<Long> out参数设置为预设集合x的内容,你需要用Mockito的doAnswer拦截方法调用,手动修改参数内容,具体代码如下:
Set<Long> x = new HashSet<>(); x.add(1L); // 替换原有的doNothing,通过Answer处理参数修改 Mockito.doAnswer(invocation -> { // 获取方法传入的第三个参数(索引从0开始计数) Set<Long> out = invocation.getArgument(2); // 清空原有内容,再添加预设集合x的所有元素,实现"设置为预设值"的效果 out.clear(); out.addAll(x); return null; // 目标方法是void类型,返回null即可 }).when(service).method(anyLong(), anyLong(), anySet());
关键说明:
doAnswer允许你在模拟方法被调用时自定义逻辑,这里用来操作传入的集合参数invocation.getArgument(2)精准获取第三个参数(out)- 如果需求是追加预设值而非覆盖原有内容,移除
out.clear()即可
内容的提问来源于stack exchange,提问作者Gábor DANI
相关产品推荐
相关产品推荐

