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?
Me siento avergonzado en este momento. Gracias por señalar esto. – Andrew
@Andrew, no te preocupes ... nos pasa a todos. Así es como aprendemos. : D – user1329572
Necesité un minuto extra para encontrar la sintaxis correcta: 'Matchers. anyVararg() ' –
jan