gpt4 book ai didi

java - 如何使用 Mockito 捕获可变参数?

转载 作者:IT老高 更新时间:2023-10-28 20:39:52 24 4
gpt4 key购买 nike

有一个方法有可变参数:

class A {
public void setNames(String... names) {}
}

现在我想用 mockito 模拟它,并捕获传递给它的名称。但是我找不到任何方法来捕获传递的任意数量的名称,我只能这样获取它们:

ArgumentCaptor<String> captor1 = ArgumentCaptor.fromClass(String.class);
ArgumentCaptor<String> captor2 = ArgumentCaptor.fromClass(String.class);

A mock = Mockito.mock(A.class);
mock.setNames("Jeff", "Mike");
Mockito.verity(mock).setNames(captor1.capture(), captor2.capture());
String name1 = captor1.getValue(); // Jeff
String name2 = captor2.getValue(); // Mike

如果我传递三个名字,它就不起作用了,我必须定义一个 captor3 来捕获第三个名字。

如何解决?

最佳答案

Mockito 1.10.5 已引入此功能。

对于问题中的代码示例,这是捕获可变参数的一种方法:

    ArgumentCaptor<String> varArgs = ArgumentCaptor.forClass(String.class);
A mock = Mockito.mock(A.class);
mock.setNames("Jeff", "Mike", "John");
Mockito.verify(mock).setNames(varArgs.capture());

//Results may be validated thus:
List<String> expected = Arrays.asList("Jeff", "Mike", "John");
assertEquals(expected, varArgs.getAllValues());

请参阅 ArgumentCaptor javadoc了解详情。

关于java - 如何使用 Mockito 捕获可变参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19851542/

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