Java Mockito为参数数目可变的方法调用when时使用参数匹配器

Java Mockito为参数数目可变的方法调用when时使用参数匹配器,java,mockito,Java,Mockito,我试图在对参数数量可变的方法(Java中的…东西)的when调用中使用参数匹配器,但没有成功。下面是我的代码,我还将列出我尝试使用的所有代码行 import static org.mockito.Mockito.*; public class MethodTest { public String tripleDot(String... args) { String sum = ""; for (String i : args) {

我试图在对参数数量可变的方法(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(new String[]{"1","2"}));

它将打印“Hello world”

但如果打印语句是:

System.out.println(mt.tripleDot(new String[]{"1"}));
System.out.println(mt.tripleDot(new String[]{"1","2"}));

它将打印“空”


我也尝试过在when调用中做一些变化,例如
anyObject()
anyString()
,但没有效果。我不确定Mockito是否能够在包含可变数量参数的方法调用中使用参数匹配器。有可能吗?如果是这样的话,我应该怎么做才能让这一切顺利进行呢?

试试matcher。这是在1.8.1中引入的。

尝试
Mockito.anyVararg()
。应该行。

我现在觉得很尴尬。谢谢你指出这一点。@Andrew,别担心,这发生在我们所有人身上。这就是我们学习的方式DI需要额外的一分钟来找到正确的语法:
Matchers。anyVararg()
链接已失效。似乎已@弃用