4.1 Parameter metode
Aturan sadurunge ditambahake menyang obyek mock urusan karo cara tanpa paramèter. Lan carane nggawe aturan kanggo cara karo paramèter? Kajaba iku, aku pengin nggawe aturan supaya kanggo sawetara nilai parameter ana siji asil, lan kanggo liyane - liyane.
Mangkono uga sampeyan bisa nindakake. Yen sampeyan pengin cara ngasilake sing spesifik karo parameter tartamtu, aturan kasebut bisa ditulis kaya mangkene:
Mockito.doReturn(result).when(an object).method name(parameter);
Ayo goleki conto supaya luwih ngerti. Ayo Daftar kita bali jeneng Ivan nalika njaluk unsur 10, lan jeneng Marya nalika njaluk 500th. Ora let suwe diomongke.
@ExtendWith(MockitoExtension.class)
class ParamsTest {
@Mock
List mockList;
@Test
public void whenMockAnnotation() {
//adding the first rule
Mockito.doReturn("Ivan").when(mockList).get(10);
//adding a second rule
Mockito.doReturn("Maria").when(mockList).get(500);
assertEquals("Ivan", mockList.get(10));
assertEquals("Maria", mockList.get(500));
}
}
4.2 Cithakan parameter
Lan kanca-kanca sing licik bakal takon pitakon: "Apa yen metode kasebut mbutuhake argumentasi, nanging kanggo nilai apa wae kudu ngasilake asil sing padha?". Ayo ora nulis:
Mockito.doReturn("Ivan").when(mockList).get(1);
Mockito.doReturn("Ivan").when(mockList).get(2);
Mockito.doReturn("Ivan").when(mockList).get(99);
Ora, ora ana sing meksa sampeyan nulis kaya ngono. Yen sampeyan pengin nambah aturan menyang obyek mock sing bisa digunakake kanggo metode kanthi argumen apa wae, mula ana obyek khusus kanggo iki:
Mockito.any()
Tuladha kita bakal ditulis kaya iki:
Mockito.doReturn("Ivan").when(mockList).get(any(int.class));
Ana sawetara nuansa ing kene. Obyek Mockito.any()
nduweni jinis Object
, saengga ana analog kanggo paramèter saka macem-macem jinis:
Metode | Jinis parameter | |
---|---|---|
1 | sembarang() | Obyek kalebu null |
2 | sembarang(ClassName.class) | jeneng kelas |
3 | anyInt() | int |
4 | anyBoolean() | boolean |
5 | sembarangDouble() | pindho |
6 | sembarang List() | Dhaptar |
Luwih bener, conto kita bakal katon kaya iki:
Mockito.doReturn("Ivan").when(mockList).get(anyInt());
4.3 Metode doAnswer().
We tak menyang prilaku Komplek saka cara virtual. Cepet utawa mengko bakal ana kahanan yen sampeyan pengin cara virtual iki duwe prilaku rumit. Contone, kudu ngasilake nilai gumantung saka paramèter, ngowahi string dadi huruf gedhe.
Ana cara khusus kanggo iki - doAnswer()
, sing ngliwati fungsi sing nindakake apa sing sampeyan butuhake:
Mockito.doAnswer(function).when(an object).method name(parameter);
Ayo nggawe metode get()
kelas List
ngasilake kuadrat saka argumen sing diterusake. Lan nulis program ing ngisor iki:
@ExtendWith(MockitoExtension.class)
class DoAnswerTest {
@Mock
List mockList;
@Test
public void whenMockAnnotation() {
Mockito.doAnswer(invocation -> {
int parameter = invocation.getArgument(0);
return parameter * parameter;
}).when(mockList).get(anyInt());
assertEquals(100, mockList.get(10));
assertEquals(25, mockList.get(5));
}
}
Kita nemtokake fungsi nggunakake obyek saka kelas Jawaban.
GO TO FULL VERSION