java Mockito为参数数目可变的方法调用时使用参数匹配器
我试图在对具有可变参数数的方法(Java中的...
)的when调用中使用参数匹配器,但没有成功。下面是我的代码,我还将列出我尝试使用的所有代码行
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是否能够在包含可变数量参数的方法调用中使用参数匹配器。有可能吗?如果是这样的话,我应该做些什么来实现这一目标
# 1 楼答案
试试^{} 匹配器。这是在1.8.1中引入的
# 2 楼答案
试试
Mockito.anyVararg()
。应该行得通