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 са еквивалентни.
GO TO FULL VERSION