关于测试中使用ArgumentCaptor来验证执行过程中对象的值

官方的示例:

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的数据结构,再进行取值验证。


你可能感兴趣的:(java,测试)