2.1 @Mock anotasi

Ada dua cara untuk bekerja dengan objek tiruan di Mockito. Yang pertama adalah membuat objek yang sepenuhnya virtual , yang kedua adalah membungkus objek yang ada di dalam sebuah pembungkus. Mari kita mulai dengan yang pertama.

Untuk membuat objek yang sepenuhnya virtual, Anda perlu menulis kode:

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

Mari kita buat kelas ArrayList tiruan 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 membuat ArrayList palsu dan menyimpan referensi ke dalam variabel mockList. Metode objek ini tidak melakukan apa-apa.

Omong-omong, kode ini dapat ditulis lebih pendek, karena ada anotasi khusus 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 kasus kedua, MockitoExtensionini akan menganalisis kode kelas itu sendiri dan membuat stub yang diperlukan. Anda tidak perlu memanggil metode Mockito.mock(). Satu anotasi dan objek virtual siap. Kecantikan.

2.2 Anotasi @Spy

Jenis objek penting kedua di Mockito adalah pembungkus objek yang ada. Mereka mengizinkan, di satu sisi, untuk menggunakan kelas yang ada, dan di sisi lain, mencegat panggilan ke semua metode dan variabel objek tersebut: untuk memperbaiki pekerjaan mereka jika perlu. Mereka digunakan sesering objek Mock.

Untuk membuat pembungkus objek, Anda perlu menulis kode:

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

Contoh dengan pembungkus di sekitar 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 bentuknya yang paling sederhana, panggilan ke objek pembungkus hanya mengalihkan panggilan ke objek asli, referensi yang disimpannya di dalam dirinya sendiri . Semuanya akan berfungsi seperti objek aslinya.

Anda juga dapat membuat pembungkus 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 contoh kode ini setara.