有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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是否能够在包含可变数量参数的方法调用中使用参数匹配器。有可能吗?如果是这样的话,我应该做些什么来实现这一目标


共 (2) 个答案

  1. # 1 楼答案

    试试^{}匹配器。这是在1.8.1中引入的

  2. # 2 楼答案

    试试Mockito.anyVararg()。应该行得通