Mengejek Pengecualian Melempar menggunakan Mockito

1. Ikhtisar

Dalam tutorial singkat ini - kita akan fokus pada cara mengonfigurasi panggilan metode untuk membuat pengecualian dengan Mockito.

Untuk informasi lebih lanjut tentang perpustakaan, lihat juga seri Mockito kami.

Berikut kelas kamus sederhana yang akan kami gunakan dalam contoh ini:

class MyDictionary { private Map wordMap = new HashMap(); public void add(String word, String meaning) { wordMap.put(word, meaning); } public String getMeaning(String word) { return wordMap.get(word); } }

2. Jenis Pengembalian Non- Void

Pertama, jika metode tipe pengembalian kita tidak void, kita bisa menggunakan when (). ThenThrow () :

@Test(expected = NullPointerException.class) public void whenConfigNonVoidRetunMethodToThrowEx_thenExIsThrown() { MyDictionary dictMock = mock(MyDictionary.class); when(dictMock.getMeaning(anyString())) .thenThrow(NullPointerException.class); dictMock.getMeaning("word"); } 

Perhatikan, kita mengonfigurasi metode getMeaning () - yang mengembalikan nilai bertipe String - untuk melempar NullPointerException saat dipanggil.

3. Jenis Pengembalian Batal

Sekarang, jika metode kami mengembalikan void, kami akan menggunakan doThrow () :

@Test(expected = IllegalStateException.class) public void whenConfigVoidRetunMethodToThrowEx_thenExIsThrown() { MyDictionary dictMock = mock(MyDictionary.class); doThrow(IllegalStateException.class) .when(dictMock) .add(anyString(), anyString()); dictMock.add("word", "meaning"); }

Di sini, kami mengonfigurasi metode add () - yang mengembalikan void - untuk menampilkan IllegalStateException saat dipanggil.

Kita tidak dapat menggunakan when (). ThenThrow () dengan tipe pengembalian void karena kompilator tidak mengizinkan metode void di dalam tanda kurung.

4. Pengecualian sebagai Objek

Tentang mengonfigurasi pengecualian itu sendiri, kita bisa meneruskan kelas pengecualian seperti pada contoh sebelumnya atau sebagai objek:

@Test(expected = NullPointerException.class) public void whenConfigNonVoidRetunMethodToThrowExWithNewExObj_thenExIsThrown() { MyDictionary dictMock = mock(MyDictionary.class); when(dictMock.getMeaning(anyString())) .thenThrow(new NullPointerException("Error occurred")); dictMock.getMeaning("word"); }

Dan kita bisa melakukan hal yang sama dengan doThrow () juga:

@Test(expected = IllegalStateException.class) public void whenConfigVoidRetunMethodToThrowExWithNewExObj_thenExIsThrown() { MyDictionary dictMock = mock(MyDictionary.class); doThrow(new IllegalStateException("Error occurred")) .when(dictMock) .add(anyString(), anyString()); dictMock.add("word", "meaning"); }

5. Mata-mata

Kami juga dapat mengonfigurasi Spy untuk menampilkan pengecualian dengan cara yang sama seperti yang kami lakukan dengan tiruan:

@Test(expected = NullPointerException.class) public void givenSpy_whenConfigNonVoidRetunMethodToThrowEx_thenExIsThrown() { MyDictionary dict = new MyDictionary(); MyDictionary spy = Mockito.spy(dict); when(spy.getMeaning(anyString())) .thenThrow(NullPointerException.class); spy.getMeaning("word"); }

6. Kesimpulan

Dalam artikel ini, kita mempelajari cara mengonfigurasi panggilan metode untuk memunculkan pengecualian di Mockito.

Seperti biasa, kode sumber lengkap dapat ditemukan di GitHub.