2.1 @Anotasi olok-olok

Terdapat dua cara untuk bekerja dengan objek olok-olok dalam Mockito. Yang pertama adalah untuk mencipta objek maya sepenuhnya , yang kedua ialah membungkus objek sedia ada dalam pembungkus. Mari kita mulakan dengan yang pertama.

Untuk mencipta objek maya sepenuhnya, anda perlu menulis kod:

ClassName variable name = Mockito.mock(ClassName.class);

Mari buat kelas ArrayList olok-olok sebagai contoh:

@ExtendWith(MockitoExtension.class)
class MockTest {
    @Test
    public void whenNotUseMockAnnotation_thenCorrect() {
        List mockList = Mockito.mock(ArrayList.class);
        //these methods won't do anything - they are stubs
        mockList.add("one");
        mockList.add("two");
    }
}

Dalam contoh ini, kami mencipta ArrayList palsu dan menyimpan rujukan kepadanya dalam pembolehubah mockList. Kaedah objek ini tidak melakukan apa-apa.

Ngomong-ngomong, kod ini boleh ditulis dengan lebih pendek, kerana terdapat anotasi khas untuk ini @Mock.

@ExtendWith(MockitoExtension.class)
class MockTest {
    @Mock
    List mockList;

    @Test
    public void whenNotUseMockAnnotation_thenCorrect() {
        //these methods won't do anything - they are stubs
        mockList.add("one");
        mockList.add("two");
    }
}

Dalam kes kedua, MockitoExtensionia akan menganalisis kod kelas itu sendiri dan mencipta stub yang diperlukan. Anda tidak perlu memanggil kaedah tersebut Mockito.mock(). Satu anotasi dan objek maya sudah sedia. Kecantikan.

2.2 @Anotasi pengintip

Jenis objek penting kedua dalam Mockito ialah pembalut ke atas objek sedia ada. Mereka membenarkan, dalam satu tangan, menggunakan kelas sedia ada, dan sebaliknya, memintas panggilan ke semua kaedah dan pembolehubah objek tersebut: untuk membetulkan kerja mereka jika perlu. Ia digunakan sekerap objek Mock.

Untuk membuat pembalut pada objek, anda perlu menulis kod:

ClassName variable name = Mockito.spy(an object);

Contoh dengan pembalut di sekeliling kelas ArrayList:

@ExtendWith(MockitoExtension.class)
class SpyTest {
    @Test
    public void whenMockAnnotation() {
        List<String> mockList = Mockito.spy(new ArrayList<String>());
        //these methods will work!
        mockList.add("one");
        mockList.add("two");
    }
}

Dalam bentuk yang paling mudah, panggilan ke objek pembalut hanya mengubah hala panggilan ke objek asal, rujukan yang disimpan di dalam dirinya sendiri . Semuanya akan berfungsi sama seperti dengan objek asal.

Anda juga boleh membuat pembalut menggunakan anotasi - @Spy.

@ExtendWith(MockitoExtension.class)
class SpyTest {
    @Spy
    List mockList = new ArrayList<String>();

    @Test
    public void whenMockAnnotation() {
        // these methods will work!
        mockList.add("one");
        mockList.add("two");
    }
}

Kedua-dua contoh kod ini adalah setara.