官方的示例:
ArgumentCaptor<Person> argument = ArgumentCaptor.forClass(Person.class);
verify(mock).doSomething(argument.capture());
assertEquals("John", argument.getValue().getName());
大体步骤:
首先构建ArgumentCaptor需要传入需要被捕获变量的对象,如示例中的Person.class。
然后在verify调用Mock对象的方法中调用argument.capture()来捕获执行该方法时该变量的值。
这样取到值后就可以进行值的验证,通过argument.getValue()得到该对象执行时的值。
关于ArgumentCaptor最多用到的方法:
argument.capture() 捕获方法参数
argument.getValue() 获取方法参数值,如果方法进行了多次调用,它将返回最后一个参数值
argument.getAllValues() 方法进行多次调用后,返回多个参数值
在使用的时候需要放在需要执行的方法之后,因为verify会验证执行,所以会放在调用方法之后,而不是像调用Mockito.when()设定条件时放在调用方法之前。
当遇到复杂对象的时候,如:Map<String,Map<String,Long>> 这样的对象的时候,觉得不好取值,可以设断点调试到该处,查看argument的数据结构,再进行取值验证。