如何用Mockito验证Mock对象指定方法的最后一次调用参数?
验证Mockito Mock对象方法的最后一次调用参数
你的需求完全贴合「最后设置生效」的业务场景——我们只需要确保add方法的最后一次调用参数符合预期,不用纠结中间调用了多少次、顺序如何,也不关心后续其他方法(比如delete)的执行。用Mockito的ArgumentCaptor就能完美解决这个问题,实现起来非常简洁。
具体实现步骤
- 创建参数捕获器:针对
add方法的参数类型(这里是String)创建ArgumentCaptor实例。 - 捕获所有调用参数:通过
verify配合anyTimes()匹配所有add方法的调用,让捕获器收集每一次调用的参数。 - 验证最后一次参数:从捕获到的参数列表中取出最后一个元素,断言它等于预期值
"2"。
代码示例
import org.mockito.ArgumentCaptor; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.anyTimes; // 假设mockedA是你已经Mock完成的对象 ArgumentCaptor<String> addParamCaptor = ArgumentCaptor.forClass(String.class); // 捕获所有add方法的调用参数 verify(mockedA, anyTimes()).add(addParamCaptor.capture()); // 获取所有调用的参数列表,取最后一个进行验证 List<String> allAddCalls = addParamCaptor.getAllValues(); assertEquals("2", allAddCalls.get(allAddCalls.size() - 1));
为什么这个方案适配你的需求?
anyTimes()会匹配任意次数的add调用,不管中间调用了多少次add("1")、add("what ever")都不会影响验证逻辑。- 完全聚焦在
add方法的最后一次参数上,不会干扰后续其他方法(比如delete("5"))的执行,不需要使用inOrder或noMoreInteractions这类复杂的验证规则。 - 一旦有人在代码末尾意外新增
add("3")这类调用,断言会直接失败,精准捕获非预期的最后设置。
内容的提问来源于stack exchange,提问作者hongchangfirst
相关产品推荐
相关产品推荐

