2.1 @Mock annotatsiyasi
Mockito'da mock-obyektlar bilan ishlashning ikki yo'li bor. Birinchisi - to'liq virtual obyekt yaratish, ikkinchisi - mavjud obyektdan foydalanish va uni o'rash. Keling birinchisidan boshlaymiz.
To'liq virtual obyekt yaratish uchun quyidagi kodni yozing:
ClassName variableName = Mockito.mock(ClassName.class);
Keling, misol uchun ArrayList klassining mockini yarataylik:
@ExtendWith(MockitoExtension.class)
class MockTest {
@Test
public void whenNotUseMockAnnotation_thenCorrect() {
List mockList = Mockito.mock(ArrayList.class);
//bu metodlar hech narsa qilmaydi - bu stublar
mockList.add("one");
mockList.add("two");
}
}
Ushbu misolda biz ArrayList turi uchun fake obyekt yaratamiz va unga mockList o'zgaruvchisi bilan bog'langan havolani saqlaymiz. Bu obyektdagi metodlar hech narsa qilmaydi.
Shuni ham aytish kerakki, bu kodni yanada qisqa yozish mumkin, chunki buning uchun maxsus @Mock annotatsiyasi mavjud.
@ExtendWith(MockitoExtension.class)
class MockTest {
@Mock
List mockList;
@Test
public void whenNotUseMockAnnotation_thenCorrect() {
//bu metodlar hech narsa qilmaydi - bu stublar
mockList.add("one");
mockList.add("two");
}
}
Ikkinchi holatda MockitoExtension kodni o'zi analiz qilib zarur stublarni yaratadi. Mockito.mock() metodini chaqirish kerak emas. Bitta annotatsiya va virtual obyekt tayyor. Zo'r.
2.2 @Spy annotatsiyasi
Mockito'dagi ikkinchi muhim obyekt turi - bu mavjud ob'ektlar uchun o'rashlar. Ular mavjud klasslardan foydalanishga imkon beradi, shuningdek, bunday ob'ektlarning barcha metod va o'zgaruvchilarini qo'lga kiritishga imkon beradi: ularning ishlashini kerakli joylarda o'zgartirish. Ular Mock-obyektlar kabi tez-tez ishlatiladi.
Obyektning o'rashini yaratish uchun quyidagi kod yozilishi kerak:
ClassName variableName = Mockito.spy(obyekt);
ArrayList klassi ustida o'rash bilan misol:
@ExtendWith(MockitoExtension.class)
class SpyTest {
@Test
public void whenMockAnnotation() {
List<String> mockList = Mockito.spy(new ArrayList<String>()); //bu metodlar ishlaydi! mockList.add("one"); mockList.add("two"); } }
Eng oddiy variantda o'rash obyekti faqat chaqiruvlarni original obyektga, ichida saqlangan, havolaga yo'naltiradi. Hammasi original obyekt bilan bo'lgani kabi ishlaydi.
O'rashni yaratish uchun @Spy annotatsiyasidan ham foydalanish mumkin.
@ExtendWith(MockitoExtension.class)
class SpyTest {
@Spy
List mockList = new ArrayList<String>();
@Test
public void whenMockAnnotation() {
// bu metodlar ishlaydi!
mockList.add("one");
mockList.add("two");
}
}
Ushbu ikkita kod misollar bir-biriga teng.
GO TO FULL VERSION