CodeGym/Java Course/Modul 3/Mengungkap Perilaku Spesifik dalam Objek

Mengungkap Perilaku Spesifik dalam Objek

Level 4, Pelajaran 4
Tersedia

5.1 Metode verifikasi()

Selain membuat objek virtual, tugas menarik lainnya sering muncul - untuk memastikan bahwa kelas yang diuji memanggil metode yang tepat dari objek yang tepat. Selain itu, dia menelepon beberapa kali, dengan parameter yang benar, dan sejenisnya.

Untuk ini, Mockito juga memiliki beberapa keajaiban - sekumpulan metode Mockito.verify(…). Aturan umum yang menentukan pemeriksaan panggilan metode adalah:

Mockito.verify(an object).method name(parameter);

Contoh:

@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);
    }
}

Selama pemanggilan metode, verify()kami menetapkan aturan bahwa mockitoListmetode dengan parameter 10 harus dipanggil pada objek get().

5.2 Metode verifikasi() dengan memeriksa jumlah panggilan

Terkadang ada skenario verifikasi yang lebih kompleks. Misalnya, Anda perlu memeriksa tidak hanya fakta bahwa metode itu dipanggil, tetapi, misalnya, metode itu dipanggil 3 kali. Atau itu dipanggil dari Anda dalam satu siklus dan oleh karena itu seharusnya dipanggil N kali.

Kami tidak akan bertanya apakah ini bisa dilakukan, kami akan langsung bertanya: bagaimana cara menuliskan aturan seperti itu? Dan lagi, Mockito tidak mengecewakan kami. Aturan dapat ditentukan sebagai:

Mockito.verify(an object,quantity).method name(parameter);

Penting! Kuantitas bukanlah tipe int, tetapi objek khusus yang dapat menentukan berbagai pola. Apakah Anda ingat versi metode yang berbeda any()? Ini sama di sini - ada metode khusus yang dapat digunakan untuk mengatur berbagai skenario:

metode Keterangan
1 tidak pernah() Metode tidak boleh dipanggil
2 kali(n) n kali
3 setidaknya(n) n kali atau lebih
4 setidaknya sekali() 1 kali atau lebih
5 paling banyak(n) n kali atau kurang
6 hanya() Seharusnya hanya ada satu panggilan dan hanya untuk metode ini

Contoh:

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());

Anda juga dapat meminta, selain pemanggilan metode yang ditentukan, tidak ada referensi lain ke objek yang dibuat . Ada aturan untuk ini:

Mockito.verifyNoMoreInteractions(an object);

5.3 Urutan pemanggilan metode

Aturan sebelumnya sama sekali tidak mengatur urutan pemanggilan metode. Aturannya hanya harus dipenuhi dan hanya itu. Tetapi ada situasi ketika urutan pemanggilan metode penting, dan Mockito juga memiliki solusi untuk ini.

Urutan pemanggilan metode yang ketat dapat ditentukan menggunakan objek khusus InOrder. Pertama, Anda perlu membuatnya:

InOrder inOrder = Mockito.inOrder(an object);

Dan kemudian tambahkan aturan dengan memanggil metode verify().

Contoh:

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 Memeriksa pengecualian di Mockito

Fakta bahwa pengecualian telah dilemparkan diperiksa sedikit berbeda. Untuk melakukan ini, gunakan metode assertThrows(). Format umum untuk cek semacam itu adalah:

Assertions.assertThrows(exception.class, () -> an object.methodname());

Tidak ada yang rumit.

Contoh:

@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());
    }
}
Komentar
  • Populer
  • Baru
  • Lama
Anda harus login untuk memberikan komentar
Halaman ini belum memiliki komentar