2012-04-18 21 views
14

Estoy tratando de usar argumentos coincidentes dentro de una cuando llama a un método que tiene un número variable de argumentos (el ... cosa en Java) sin éxito. Mi código está debajo y también voy a enumerar todas las líneas que traté de usar para que esto funcione.Mockito usando argumentos coincidentes para cuando llame al método con número variable de argumentos

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

Si la declaración de impresión es:

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

o

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

Se imprimirá "Hola mundo".

Pero si la instrucción de impresión es:

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

o

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

se imprimirá "nulo".

También intenté hacer variaciones en la llamada al, como anyObject() o anyString(), pero fue en vano. No estoy seguro de si Mockito puede manejar el uso de argumentos coincidentes con respecto a las llamadas a métodos que incluyen una cantidad variable de argumentos. ¿Es posible? Si es así, ¿qué debería hacer para que esto funcione?

Respuesta

30

Pruebe el anyVararg() matcher. Esto fue introducido en 1.8.1.

+0

Me siento avergonzado en este momento. Gracias por señalar esto. – Andrew

+2

@Andrew, no te preocupes ... nos pasa a todos. Así es como aprendemos. : D – user1329572

+3

Necesité un minuto extra para encontrar la sintaxis correcta: 'Matchers. anyVararg() ' – jan

4

Probar Mockito.anyVararg(). Deberia de funcionar.

Cuestiones relacionadas