gpt4 book ai didi

java - Mockito v1 和 v2 之间 ArgumentCaptor 的区别

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:51:44 28 4
gpt4 key购买 nike

我目前正在将遗留项目的单元测试从 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 个元素,在 B 行为 5 个元素。前 5 个元素已被删除。然后单元测试失败,因为代码的下一部分需要一个大小为 10 的列表。

有人对这种行为有解释吗?关于这一点,我在 Mockito wiki 上没有找到任何内容。根据“capture”方法的javadoc,list_mess的大小应该还是10:

Use it to capture the argument. This method must be used inside of verification.

Internally, this method registers a special implementation of an {@link ArgumentMatcher}.

This argument matcher stores the argument value so that you can use it later to perform assertions.

最佳答案

实际上这是 Mockito 团队的一个已知错误:https://github.com/mockito/mockito/pull/819

关于java - Mockito v1 和 v2 之间 ArgumentCaptor 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41142949/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com