Mockito V1和V2之间的参数captor差异



我目前正在将旧版项目的单元测试从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

相关内容

  • 没有找到相关文章

最新更新