当调用具有可变数量参数的方法时,Mockito使用参数匹配器

时间:2012-04-18 17:03:29

标签: java mockito

我试图在调用具有可变数量的参数(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());
        }
    }
}

如果print语句是:

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

System.out.println(mt.tripleDot("1"));

它将打印“Hello world。”

但是如果print语句是:

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

System.out.println(mt.tripleDot("1","2"));

它将打印“null”。

我也尝试过调用时的变体,例如anyObject()anyString(),但无济于事。我不确定Mockito是否可以处理包含可变数量参数的方法调用的参数匹配器。它甚至可能吗?如果是这样,我应该怎么做才能使这项工作?

2 个答案:

答案 0 :(得分:38)

尝试使用anyVararg()匹配器。这是在1.8.1中引入的。

答案 1 :(得分:6)

试试Mockito.anyVararg()。它应该工作。