Mockito When / Then Cookbook

1. Ikhtisar

Buku masak ini menunjukkan cara menggunakan Mockito untuk mengonfigurasi perilaku dalam berbagai contoh dan kasus penggunaan.

The format buku masak adalah contoh terfokus dan praktis - tidak ada rincian yang asing dan penjelasan yang diperlukan.

Dan tentu saja, jika Anda ingin mempelajari lebih lanjut tentang pengujian yang baik dengan Mockito, lihat artikel Mockito lainnya di sini.

Kita akan mengejek implementasi daftar sederhana - implementasi yang sama yang kita gunakan di buku masak sebelumnya:

public class MyList extends AbstractList { @Override public String get(final int index) { return null; } @Override public int size() { return 1; } } 

2. Buku masak

konfigurasikan perilaku pengembalian sederhana untuk tiruan

MyList listMock = Mockito.mock(MyList.class); when(listMock.add(anyString())).thenReturn(false); boolean added = listMock.add(randomAlphabetic(6)); assertThat(added, is(false));

mengkonfigurasi perilaku pengembalian untuk tiruan dengan cara alternatif

MyList listMock = Mockito.mock(MyList.class); doReturn(false).when(listMock).add(anyString()); boolean added = listMock.add(randomAlphabetic(6)); assertThat(added, is(false));

konfigurasikan tiruan untuk membuat pengecualian pada pemanggilan metode

@Test(expected = IllegalStateException.class) public void givenMethodIsConfiguredToThrowException_whenCallingMethod_thenExceptionIsThrown() { MyList listMock = Mockito.mock(MyList.class); when(listMock.add(anyString())).thenThrow(IllegalStateException.class); listMock.add(randomAlphabetic(6)); }

konfigurasikan perilaku metode dengan tipe pengembalian kosong - untuk membuat pengecualian

MyList listMock = Mockito.mock(MyList.class); doThrow(NullPointerException.class).when(listMock).clear(); listMock.clear();

konfigurasikan perilaku beberapa panggilan

MyList listMock = Mockito.mock(MyList.class); when(listMock.add(anyString())) .thenReturn(false) .thenThrow(IllegalStateException.class); listMock.add(randomAlphabetic(6)); listMock.add(randomAlphabetic(6)); // will throw the exception

konfigurasikan perilaku mata-mata

MyList instance = new MyList(); MyList spy = Mockito.spy(instance); doThrow(NullPointerException.class).when(spy).size(); spy.size(); // will throw the exception

konfigurasi metode untuk memanggil metode yang sebenarnya dan mendasari pada tiruan

MyList listMock = Mockito.mock(MyList.class); when(listMock.size()).thenCallRealMethod(); assertThat(listMock.size(), equalTo(1));

konfigurasikan panggilan metode tiruan dengan Answer kustom

MyList listMock = Mockito.mock(MyList.class); doAnswer(invocation -> "Always the same").when(listMock).get(anyInt()); String element = listMock.get(1); assertThat(element, is(equalTo("Always the same")));

3. Kesimpulan

Format ini adalah eksperimen - Saya menerbitkan beberapa buku masak pengembangan internal saya tentang topik tertentu - di Google Guava, Hamcrest, dan sekarang Mockito . Tujuannya adalah agar informasi ini tersedia secara online - dan menambahkannya setiap kali saya menemukan contoh baru yang berguna.

Penerapan semua contoh dan cuplikan kode ini dapat ditemukan di GitHub - ini adalah proyek berbasis Maven, jadi semestinya mudah untuk mengimpor dan menjalankannya apa adanya.