CodeGym /Kursy /All lectures for PL purposes /Podstawowe adnotacje Mockito

Podstawowe adnotacje Mockito

All lectures for PL purposes
Poziom 1 , Lekcja 404
Dostępny

2.1 Adnotacja @Mock

Istnieją dwa sposoby pracy z makiety obiektów w Mockito. Pierwszym jest stworzenie w pełni wirtualnego obiektu , drugim jest zawinięcie istniejącego obiektu w opakowanie. Zacznijmy od pierwszego.

Aby stworzyć w pełni wirtualny obiekt, należy napisać kod:

ClassName variable name = Mockito.mock(ClassName.class);

Stwórzmy przykładową klasę ArrayList:

@ExtendWith(MockitoExtension.class)
class MockTest {
 @Test
    public void whenNotUseMockAnnotation_thenCorrect() {
 List mockList = Mockito.mock(ArrayList.class);
        //these methods won't do anything - they are stubs
 mockList.add("one");
 mockList.add("two");
    }
}

W tym przykładzie tworzymy fałszywą listę ArrayList i zapisujemy do niej odwołanie w zmiennej mockList. Metody tego obiektu nic nie robią.

Nawiasem mówiąc, ten kod można zapisać jeszcze krócej, ponieważ jest do tego specjalna adnotacja @Mock.

@ExtendWith(MockitoExtension.class)
class MockTest {
 @Mock
 List mockList;

 @Test
    public void whenNotUseMockAnnotation_thenCorrect() {
        //these methods won't do anything - they are stubs
 mockList.add("one");
 mockList.add("two");
    }
}

W drugim przypadku MockitoExtensionsam przeanalizuje kod klasy i utworzy niezbędne kody pośredniczące. Nie musisz wywoływać metody Mockito.mock(). Jedna adnotacja i wirtualny obiekt gotowy. Uroda.

2.2 Adnotacja @Spy

Drugim ważnym typem obiektów w Mockito są nakładki na istniejące obiekty. Pozwalają one z jednej strony na wykorzystanie istniejących klas, az drugiej strony na przechwytywanie wywołań wszystkich metod i zmiennych takich obiektów, aby w razie potrzeby poprawić ich działanie. Używane są równie często jak obiekty Mock.

Aby utworzyć opakowanie na obiekcie, musisz napisać kod:

ClassName variable name = Mockito.spy(an object);

Przykład z opakowaniem wokół klasy ArrayList:

@ExtendWith(MockitoExtension.class)
class SpyTest {
 @Test
    public void whenMockAnnotation() {
 List<String> mockList = Mockito.spy(new ArrayList<String>()); //these methods will work!  mockList.add("one");  mockList.add("two"); } } 

W najprostszej formie wywołanie obiektu opakowującego po prostu przekierowuje wywołania do oryginalnego obiektu, do którego odniesienie jest przechowywane w sobie . Wszystko będzie działać tak, jak z oryginalnym obiektem.

Możesz także utworzyć opakowanie za pomocą adnotacji - @Spy.

@ExtendWith(MockitoExtension.class)
class SpyTest {
 @Spy
 List mockList = new ArrayList<String>();

 @Test
    public void whenMockAnnotation() {
        // these methods will work!
 mockList.add("one");
 mockList.add("two");
    }
}

Te dwa przykłady kodu są równoważne.

Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION