2012-04-18 197 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()。它應該工作。