Mockito怎么验证最后一次调用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hongchangfirst/article/details/80453203

比如说你有一段代码像这样:

{
    ...
    A.add("1");
    ...
    A.add("what ever");
    ...
    A.add("2");
    A.delete("5");
    ...
}

你想验证A的add方法最后一次调用的时候参数是2,怎么做呢?

方法1 可以利用ArgumentCaptor去获得所有的实参,然后判断最后一个即可。

ArgumentCaptor<String> argument = ArgumentCaptor.forClass(String.class);
Mockito.verify(service, Mockito.atLeastOnce()).add(argument.capture());
List<String> values = argument.getAllValues();
assertTrue(values.contains("exception.message"));

如果没有atLeastOnce(),如果你的add方法被调用了多余一次的话,会报错:org.mockito.exceptions.verification.TooManyActualInvocations

方法2 如果你的service是一个很简单的POJO的话,也可以不mock它,直接用真实的,最后验证数据是不是你想要的就好了。但如果你的service还依赖于其他更多的对象,其它的对象又依赖于其它对象,这种方式有可能不是很容易的用真实数据,而且也导致你写的不是Unit Test,更像是Integration Test了。不过如果很容易生成,也可以试一试,毕竟测的更多也不是坏事。

方法3 直接用ArgumentCaptor的getValue(),这个会拿到最后一次的值,根据题意的需求,这个是目前最好的写法。但是方法一可以扩展到其它类型的测试,比如倒数第二个之类的。

更详细的讨论:

https://stackoverflow.com/questions/50503729/mockito-verify-the-last-call-on-a-mocked-object


原文:http://blog.csdn.net/hongchangfirst/article/details/80453203

作者:hongchangfirst

hongchangfirst的主页:http://blog.csdn.net/hongchangfirst


猜你喜欢

转载自blog.csdn.net/hongchangfirst/article/details/80453203
今日推荐