关于测试中使用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的数据结构,再进行取值验证。


转载于:https://my.oschina.net/Kxvz/blog/417355

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用Mockito的ArgumentCaptor来捕获方法调用的参数对象,并进一步验证其字段是否符合预期。具体步骤如下: 1. 创建一个ArgumentCaptor对象,并使用when方法模拟方法调用,将参数传递给ArgumentCaptor对象来捕获参数对象。 例如,假设有一个名为userService的服务,其有一个updateUser方法,其参数是一个名为user的User对象,我们可以使用以下代码来模拟方法调用并捕获参数对象: ``` ArgumentCaptor<User> userCaptor = ArgumentCaptor.forClass(User.class); when(userService.updateUser(userCaptor.capture())).thenReturn(true); ``` 2. 调用被测方法第一次,并验证其结果是否符合预期。 例如,假设有一个名为userService的服务,其有一个updateUser方法,我们可以使用以下代码来调用被测方法: ``` userService.updateUser(new User("John", 18)); ``` 并验证其结果是否符合预期: ``` verify(userService).updateUser(any(User.class)); ``` 3. 调用被测方法第二次,并验证其结果是否符合预期。 例如,我们想要验证第二次调用时传递给updateUser方法的参数对象的name字段是否为"Tom",我们可以使用以下代码: ``` userService.updateUser(new User("Tom", 20)); User capturedUser = userCaptor.getValue(); assertEquals("Tom", capturedUser.getName()); ``` 注意,getValue()方法将返回ArgumentCaptor对象捕获的参数对象,因此我们可以对其进行进一步的验证。 希望这可以帮助到你!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值