2.1 @Mock анотация

Има два начина за работа с фалшиви обекти в Mockito. Първият е да създадете напълно виртуален обект , вторият е да обвиете съществуващ обект в обвивка. Да започнем с първия.

За да създадете напълно виртуален обект, трябва да напишете codeа:

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

Нека създадем макет клас 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");
    }
}

В този пример създаваме фалшив ArrayList и съхраняваме препратка към него в променливата mockList. Методите на този обект не правят нищо.

Между другото, този code може да бъде написан дори по-кратко, тъй като има специална анотация за това @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");
    }
}

Във втория случай MockitoExtensionтой ще анализира самия code на класа и ще създаде необходимите мъничета. Не е необходимо да извиквате метода Mockito.mock(). Една анотация и виртуалният обект е готов. красота.

2.2 Анотация @Spy

Вторият важен тип обекти в Mockito са обвивки над съществуващи обекти. Те позволяват, от една страна, да се използват съществуващи класове, а от друга страна, да се прихващат повиквания към всички методи и променливи на такива обекти: да се коригира тяхната работа, където е необходимо. Използват се точно толкова често, колкото и фалшивите обекти.

За да създадете обвивка върху обект, трябва да напишете codeа:

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

Пример с обвивка около класа 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");
    }
}

В най-простата си форма извикването към обект-обвивка просто пренасочва извикванията към оригиналния обект, препратката към който той запазва вътре в себе си . Всичко ще работи точно Howто с оригиналния обект.

Можете също да създадете обвивка, като използвате анотацията - @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");
    }
}

Тези два примера на code са еквивалентни.