2012-04-18 199 views
14

我试图在调用具有可变数量参数的方法(Java中的...事件)时没有成功时使用参数匹配器。我的代码在下面,我还会列出我尝试使用的所有行。Mockito使用参数匹配器来调用具有可变数量参数的方法

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")); 

这将打印 “空”。

我也试过在做什么变化的时候打电话,比如anyObject()anyString()但无济于事。我不确定Mockito是否可以使用参数匹配器来处理包含可变数量参数的方法调用。它甚至有可能吗?如果是这样,我该怎么做才能做到这一点?

回答

30

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

+0

我现在感到很尴尬。感谢您指出了这一点。 – Andrew 2012-04-18 17:08:31

+2

@安德鲁,别担心,它发生在我们所有人身上。这就是我们学习的方式。 :D – user1329572 2012-04-18 17:09:06

+3

我需要一分钟才能找到正确的语法:'Matchers。 anyVararg()' – jan 2013-08-13 17:27:15

4

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