我目前正在将旧版项目的单元测试从Mockito V1升级到Mockito V2。
在单元测试之一中,我有以下代码:
Listener listener = new Listener();
Alert alert = new Alert (listener);
alert.action(); // action calls 5 times the "notify" method on "listener"
ArgumentCaptor<Mess> argument = ArgumentCaptor.forClass(Mess.class);
verify(listener, times(5)).notify(argument.capture());
List<Mess> list_mess = argument.getAllValues(); // A
// The test checks list_mess and does some stuff on "alert"
alert.action(); // action calls 5 times the "notify" method on "listener"
argument = ArgumentCaptor.forClass(Mess.class);
verify(listener, times(10)).notify(argument.capture());
list_mess = argument.getAllValues(); // B
"验证"还可以。但是由于我一直使用Mockito V2,因此List_mess具有不同的值:
- 在Mockito V1中:在A线上,List_mess的大小为5个元素,是B 的10个元素
- 在Mockito v2中:在第A行中,List_mess的大小为5个元素,是L。LLIST_MESS。已删除了前5个元素。然后单位测试失败,因为代码的下一部分期望大小10列表。
有人对这种行为有解释吗?在这一点上,我在Mockito Wiki上没有发现任何东西。根据"捕获"的javadoc。方法,list_mess大小仍应为10:
使用它来捕获参数。此方法必须在验证内部使用。
在内部,此方法会记录{@link grightmatcher}的特殊实现。
此参数匹配器存储参数值,以便您以后使用它执行断言。
实际上是Mockito团队的已知错误:https://github.com/mockito/mockito/mockito/pull/819