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?
Czuję się teraz tak zawstydzony. Dzięki za wskazanie tego. – Andrew
@Andrew, nie przejmuj się ... zdarza się nam wszystkim. Tak się uczymy. : D – user1329572
Potrzebowałem dodatkowej minuty, aby znaleźć poprawną składnię: 'Matchery. anyVararg() ' –
jan