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 Listngasilake 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.