5.1 Ang verify() na paraan
Bilang karagdagan sa paglikha ng mga virtual na bagay, ang isa pang kawili-wiling gawain ay madalas na lumitaw - upang matiyak na ang klase sa ilalim ng pagsubok ay tumatawag sa mga tamang pamamaraan ng mga tamang bagay. Bukod dito, tinawag niya ang kinakailangang bilang ng beses, na may tamang mga parameter, at iba pa.
Para dito, mayroon ding mahika si Mockito - isang pamilya ng mga pamamaraan Mockito.verify(…)
. Ang pangkalahatang tuntunin na tumutukoy sa paraan ng pagsuri ng tawag ay:
Mockito.verify(an object).method name(parameter);
Halimbawa:
@ExtendWith(MockitoExtension.class)
class VerifyTest {
@Mock
List<String> mockList;
@Test
public void whenMockAnnotation() {
//method call
String name = mockList.get(10);
// check if the method was called
Mockito.verify(mockList).get(10);
}
}
Sa panahon ng tawag sa pamamaraan, verify()
itinakda namin ang panuntunan na mockitoList
ang pamamaraan na may parameter na 10 ay dapat tawagin sa object get()
.
5.2 Ang verify() na paraan sa pagsuri sa bilang ng mga tawag
Minsan may mga mas kumplikadong senaryo sa pag-verify. Halimbawa, kailangan mong suriin hindi lamang ang katotohanan na tinawag ang pamamaraan, ngunit, halimbawa, tinawag itong 3 beses. O ito ay tinawag mula sa iyo sa isang cycle at samakatuwid ay dapat na tinatawag na N beses.
Hindi namin itatanong kung magagawa ito, itatanong namin kaagad: paano isulat ang gayong panuntunan? At muli, hindi kami binigo ni Mockito. Maaaring tukuyin ang panuntunan bilang:
Mockito.verify(an object,quantity).method name(parameter);
Mahalaga! Ang dami ay hindi isang uri int
, ngunit isang espesyal na bagay na maaaring tukuyin ang iba't ibang mga pattern. Naaalala mo ba ang iba't ibang bersyon ng pamamaraan any()
? Ito ay pareho dito - may mga espesyal na pamamaraan kung saan maaari kang magtakda ng iba't ibang mga sitwasyon:
Pamamaraan | Paglalarawan | |
---|---|---|
1 | hindi kailanman() | Ang pamamaraan ay hindi dapat tawagin |
2 | beses(n) | n beses |
3 | hindi bababa sa(n) | n o higit pang beses |
4 | kahit isang beses() | 1 o higit pang beses |
5 | sa Karamihan(n) | n o mas kaunting beses |
6 | lamang() | Dapat ay may isang tawag lamang at sa paraang ito lamang |
Halimbawa:
String name1 = mockList.get(1); //method call
String name2 = mockList.get(2); //method call
String name3 = mockList.get(3); //method call
//check that the get() method was called 3 times
Mockito.verify(mockList, times(3)).get(anyInt());
Maaari mo ring hilingin na, bukod sa tinukoy na paraan ng mga invocation, walang ibang reference sa object na gagawin . Mayroong panuntunan para dito:
Mockito.verifyNoMoreInteractions(an object);
5.3 Paraan ng pagkakasunud-sunod ng tawag
Ang mga nakaraang tuntunin ay hindi kinokontrol ang pagkakasunud-sunod ng mga pamamaraan ng pagtawag sa anumang paraan. Kailangan lang matupad ang panuntunan at iyon na. Ngunit may mga sitwasyon kung kailan mahalaga ang pagkakasunud-sunod ng mga tawag sa pamamaraan, at may solusyon din si Mockito para dito.
Ang isang mahigpit na pagkakasunud-sunod ng mga tawag sa pamamaraan ay maaaring tukuyin gamit ang isang espesyal na bagay InOrder
. Una kailangan mong likhain ito:
InOrder inOrder = Mockito.inOrder(an object);
At pagkatapos ay magdagdag ng mga panuntunan dito sa pamamagitan ng pagtawag sa mga pamamaraan verify()
.
Halimbawa:
List<String> mockedList = mock(MyList.class);
mockedList.size();
mockedList.add("a parameter");
mockedList.clear();
InOrder inOrder = Mockito.inOrder(mockedList);
inOrder.verify(mockedList).size();
inOrder.verify(mockedList).add("a parameter");
inOrder.verify(mockedList).clear();
5.4 Pagsusuri ng mga pagbubukod sa Mockito
Ang katotohanan na ang mga pagbubukod ay itinapon ay nasuri nang medyo naiiba. Upang gawin ito, gamitin ang pamamaraan assertThrows()
. Ang pangkalahatang format para sa naturang tseke ay:
Assertions.assertThrows(exception.class, () -> an object.methodname());
Walang kumplikado.
Halimbawa:
@ExtendWith(MockitoExtension.class)
class ThenThrowTest {
@Mock
List mockList;
@Test
public void whenMockAnnotation() {
//set the behavior of the method (needed for demonstration purposes only)
Mockito.when(mockList.size()).thenThrow(IllegalStateException.class);
//check if an IllegalStateException will be thrown when calling the size method
assertThrows(IllegalStateException.class, () -> mockList.size());
}
}