我试图在调用具有可变参数数量的方法(Java 中...
)的方法中使用参数匹配器,但没有成功。 我的代码在下面,我还将列出我尝试用于完成这项工作的所有行。
import static org.mockito.Mockito.*;
public class MethodTest {
public String tripleDot(String... args) {
String sum = "";
for (String i : args) {
sum += i;
}
System.out.println(sum);
return sum;
}
public static void main(String[] args) {
try{
MethodTest mt = mock(MethodTest.class);
when(mt.tripleDot((String[])anyObject())).thenReturn("Hello world!");
System.out.println(mt.tripleDot(new String[]{"1","2"}));
}
catch (Exception e) {
System.out.println(e.getClass().toString() + ": " + e.getMessage());
}
}
}
如果打印语句为:
System.out.println(mt.tripleDot(new String[]{"1"}));
或
System.out.println(mt.tripleDot("1"));
它将打印"Hello world"。
但如果打印语句是:
System.out.println(mt.tripleDot(new String[]{"1","2"}));
或
System.out.println(mt.tripleDot("1","2"));
它将打印"空"。
我也尝试在 when 调用中做一些变化,例如 anyObject()
或 anyString()
但无济于事。 我不确定 Mockito 是否可以处理在包含可变数量参数的方法调用方面使用参数匹配器。 甚至可能吗? 如果是这样,我应该怎么做才能完成这项工作?
尝试anyVararg()
匹配器。这是在 1.8.1 中引入的。
试试Mockito.anyVararg()
.它应该有效。
Mockito.anyVararg()
自 2.1.0
日起已弃用。最好使用ArgumentMatchers.any()
或ArgumentMatchers.any(class)
。