5.1 Метод verify()
Виртуалдык объекттерди жаратуудан тышкары, кээде дагы бир кызыктуу маселе келип чыгат - тесттөөчү класс объекттердин керектүү методдорун чакырганын текшерүү. Мындан тышкары, ал керектүү санын чакырып, туура параметрлер менен чакырылганын текшерүү сыяктуу.
Бул үчүн Mockito'до дагы бир аз сыйкыр бар - Mockito.verify(…)
методдорунун үй-бүлөсү. Методдун чакырылышын текшерүү үчүн негизги эреже мындай көрүнөт:
Mockito.verify(объект).имяМетода(параметр);
Мисал:
@ExtendWith(MockitoExtension.class)
class VerifyTest {
@Mock
List<String> mockList;
@Test
public void whenMockAnnotation() {
//методдун чакырылышы
String name = mockList.get(10);
//методдун чакырылгандыгын текшеребиз
Mockito.verify(mockList).get(10);
}
}
verify()
методун чакырганда, биз mockitoList
объектисинде get()
методу 10 параметри менен чакырылышы керек деген эрежени коюп койдук.
5.2 Метод verify() чакыруулар санын текшерүү менен
Кээде татаалыраак текшерүү сценарийлери болот. Мисалы, методдун чакырылганын текшерүү жетишсиз, аны үч жолу чакырганын текшерүү керек болот. Же циклиңдин ичинде чакырылып, N жолу чакырылган болушу керек деп.
Муну жасоого болобу деп сурообуз жок, аны кантип жазууну дароо сурайбыз. Жана дагы бир жолу Mockito бизди көңүлүбүздү калтырбайт. Эрежени мындайча жазууга болот:
Mockito.verify(объект,количество).имяМетода(параметр);
Маанилүү! Количество – бул int
тиби эмес, бул ар кандай шаблондорду койо алган атайын объект. any()
методунун ар түрдүү варианттарын эстейсиңби? Бул жерде да ушундай – ар кандай сценарийлерди коюуга мүмкүнчүлүк берген атайын методдор бар:
Метод | Сүрөттөмө | |
---|---|---|
1 | never() | Метод эч качан чакырылбашы керек |
2 | times(n) | n жолу |
3 | atLeast(n) | n же андан көп жолу |
4 | atLeastOnce() | 1 же андан көп жолу |
5 | atMost(n) | n же андан аз жолу |
6 | only() | Бир гана чакырылышы жана ошол методго гана болушу керек |
Мисал:
String name1 = mockList.get(1); //методдун чакырылышы
String name2 = mockList.get(2); //методдун чакырылышы
String name3 = mockList.get(3); //методдун чакырылышы
//методду get() 3 жолу чакырылганын текшеребиз
Mockito.verify(mockList, times(3)).get(anyInt());
Сен ошондой эле методду белгиленген чакыруулардан тышкары, объект менен эч кандай башка иш болбогонун талап кыла аласың. Бул үчүн мындай эреже бар:
Mockito.verifyNoMoreInteractions(объект);
5.3 Методдорду чакыруунун тартиби
Мурунку эрежелер методдорду чакыруунун тартибин жөнгө салган эмес. Эреже аткарылышы керек болгону эле. Бирок кээде методдорду чакыруунун тартиби маанилүү учурлар болот, жана бул үчүн Mockito'до дагы чечим бар.
Методдорду чакыруунун катуу тартибин коюу үчүн атайын InOrder
объектти колдонсо болот. Биринчи аны түзүү керек:
InOrder inOrder = Mockito.inOrder(объект);
Андан кийин ага verify()
методдорун чакыруу аркылуу эрежелерди кошо аласың.
Мисал:
List<String> mockedList = mock(MyList.class);
mockedList.size();
mockedList.add("бир параметр");
mockedList.clear();
InOrder inOrder = Mockito.inOrder(mockedList);
inOrder.verify(mockedList).size();
inOrder.verify(mockedList).add("бир параметр");
inOrder.verify(mockedList).clear();
5.4 Mockito'догу өзгөчө учурларды текшерүү
Өзгөчө учурлардын пайда болушун текшерүү бир аз башкача ишке ашат. Бул үчүн assertThrows()
методун колдонуу керек. Текшерүүнүн жалпы форматы мындай көрүнөт:
Assertions.assertThrows(исключение.class, () -> объект.имяМетода());
Кыйынчылык жок.
Мисал:
@ExtendWith(MockitoExtension.class)
class ThenThrowTest {
@Mock
List mockList;
@Test
public void whenMockAnnotation() {
//методдун жүрүмүн коюу (демонстрация үчүн гана керек)
Mockito.when(mockList.size()).thenThrow(IllegalStateException.class);
//методдун чакырылышында IllegalStateException ыргытыларын текшеребиз
assertThrows(IllegalStateException.class, () -> mockList.size());
}
}
GO TO FULL VERSION