Przegląd adnotacji w Mockito

W ramach tego wpisu zrobimy przegląd wszystkich dostępnych w Mockito adnotacji. Skupimy się na tych, które są częścią API, pominiemy natomiast te wewnętrzne. Przegląd będzie w kolejności alfabetycznej.

@Captor

Umożliwia wygodne tworzenie Argument Captor czyli mechanizmu do przechwytywania wartości parametru z jakim został uruchomiony mock.

@DoNotMock

Adnotacja do oznaczania typów, które nie powinny być mockowane. Zamiast tego należy użyć innych sposobów dostarczania implementacji w celach przeprowadzenia testów.

@Incubating

To tzw. "Marker interface" - w tym przypadku do oznaczania funkcjonalności, które należy traktować jako testowe, w fazie inkubacji (stąd nazwa). W wersji 4.8.0 znalazłem tylko jedno odwołanie do tej adnotacji, w dokumentacji opisującej mockowanie klas i metod finalnych.

@InjectMocks

Tworzy wskazany obiekt i wstrzykuje do niego mocki. Używany w połączeniu z MockitoAnnotations.openMocks().

@Mock

Tworzy mock. Używany w połączeniu z MockitoAnnotations.openMocks().

@NotExtensible

Kolejny marker interface. Oznaczone nim klasy nie powinny być rozszerzane. Z tego co rozumiem, autorzy biblioteki nie chcą ustawiać klas jako finalne, bo rozszerzanie klas powinno być możliwe przy tworzeniu rozszerzeń do Mockito, ale raczej nie jest to typowe wykorzystanie tej biblioteki.

@Spy

Tworzy spy'a, połowiczny mock. Można dzięki temu zmockować tylko część metod w klasie, a dla pozostałej części pozostawić oryginalną funkcjonalność. Używany w połączeniu z MockitoAnnotations.openMocks().

@MockitoSettings

Ta adnotacja pochodzi z dodatkowej biblioteki org.mockito:mockito-junit-jupiter, a nie org.mockito:mockito-core jak wszystkie do tej pory. Można jej użyć zamiast @ExtendWith(MockitoExtension.class). Pozwala na ustawienie poziomu surowości (ang. strictness) dla mocków. Domyślny poziom to Strictness.STRICT_STUBS, co znaczy tyle, że Mockito rzuci wyjątkiem jeśli na mocku zostanie zdefiniowane zachowanie, ale nigdy nie zostanie ono wywołane. Wskazuje to na niepotrzebne akcje w teście i w związku z tym jest odradzane.

Dyskusja i komentarze

Masz pytania do tego wpisu? Może chcesz się podzielić spostrzeżeniami? Zapraszamy dyskusji na naszej grupie na Facebooku.