繁体   English   中英

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

[英]Mockito using argument matchers for when call on method with variable number of arguments

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM