2012-04-18 4 views
14

Próbuję użyć argumentów matchers w trakcie wywołania metody, która ma zmienną liczbę argumentów (rzecz o nazwie ... w Javie) bez powodzenia. Mój kod znajduje się poniżej, a ja również listę wszystkich linii, których próbowałem użyć, aby to działało.Mockito z użyciem argumentów matchers dla wywołania metody ze zmienną liczbą argumentów

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()); 
     } 
    } 
} 

Jeśli instrukcja print to:

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

lub

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

będzie drukować "Hello World".

Ale jeśli instrukcja print to:

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

lub

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

będzie drukować "null".

Próbowałem również wykonywać wariacje podczas połączenia, takie jak anyObject() lub anyString(), ale bez skutku. Nie jestem pewien, czy Mockito poradzi sobie z używaniem argumentów w odniesieniu do wywołań metod zawierających zmienną liczbę argumentów. Czy to możliwe? Jeśli tak, co powinienem zrobić, aby to zadziałało?

Odpowiedz

30

Wypróbuj przystawkę anyVararg(). Zostało to wprowadzone w 1.8.1.

+0

Czuję się teraz tak zawstydzony. Dzięki za wskazanie tego. – Andrew

+2

@Andrew, nie przejmuj się ... zdarza się nam wszystkim. Tak się uczymy. : D – user1329572

+3

Potrzebowałem dodatkowej minuty, aby znaleźć poprawną składnię: 'Matchery. anyVararg() ' – jan

4

Wypróbuj Mockito.anyVararg(). Powinno działać.