pod uwagę scenariusz, w którym testujemy metodę, która zależy od współpracownika . Ten współpracownik bierze argument podczas wywoływania jednej ze swoich metod. Teraz nie może być dwóch scenarios- 1. Argument jest przekazywana na zewnątrz metodą testujemy, a następnie wykorzystywane przez współpracownika podczas własnej wywołania metody
method(argument arg)
{
collaborator.callMethod(arg);
}
Aby przetestować tę metodę możemy mock kolaboranta a następnie wywołać metodę następująco
method(arg1);
Mockito.verify(collaborator).callMethod(arg1);
Więc tutaj w metodzie testowej mamy arg1 instancji, a zatem mogą być weryfikowane
2.Argument używany przez współpracownika, aby jego własna wywołanie metody nie są przekazywane na zewnątrz i jednak tworzone wewnątrz metody testowane
method()
{
arg=CreateArgumentInternally();
collaborator.callMethod(arg);
}
Aby przetestować tę metodę możemy mock współpracownika, a następnie wywołać metodę następująco
method();
Ale w jaki sposób możemy sprawdzić, z jakim współpracownikiem wywołano argumenty, ponieważ nie mamy dostępu do argumentu, ponieważ został on utworzony wewnętrznie wewnątrz metody. To tam pojawia się obraz Mockito ArgumentCaptor.
Używając ArgumentCaptor możemy uzyskać instancję argumentu utworzoną wewnętrznie i wykorzystaną w wywołaniu współpracownika, dzięki czemu możemy ją zweryfikować.
Mockito.verify(collaborator).callMethod(captor.capture());
Argument actual = captor.getValue();
Reference- Understanding Mockito ArgumentCaptor using Spring Boot Test Example
Co jeśli istnieje wiele parametry przekazywane do metody - wszystko z różnych typów? Jak faktycznie sprawdzić, czy parametr boolowski miał wartość ** prawda **, na przykład. –
Czy możesz podać wyjaśnienie swojego komentarza: _Oh, i proszę rozważyć użycie TestNG zamiast JUnit._. Po co to rozważać? Dlaczego zmieniać? – Navigatron