3.1 metode doReturn()
Sekarang datang keajaiban...
Katakanlah Anda membuat objek tiruan palsu, tetapi Anda membutuhkannya agar berfungsi. Ketika metode tertentu dipanggil, sesuatu yang penting dilakukan, atau metode mengembalikan hasil tertentu. Apa yang harus dilakukan?
Pustaka Mockito memungkinkan Anda menambahkan perilaku yang diinginkan ke objek tiruan.
Jika Anda ingin objek tiruan mengembalikan hasil tertentu saat metode tertentu dipanggil, maka "aturan" ini dapat ditambahkan ke objek menggunakan kode:
Mockito.doReturn(result).when(an object).method name();
Anda lihat, di akhir pemanggilan metode, method name?
sebenarnya tidak ada pemanggilan yang terjadi di sini. Metode ini doReturn()
mengembalikan objek proxy khusus dengan bantuan yang memantau panggilan metode objek dan, dengan demikian, aturannya ditulis.
Lagi. Itu hanya cara yang cerdik untuk menulis aturan untuk ditambahkan ke objek tiruan . Dibutuhkan keterampilan untuk menafsirkan kode seperti itu dengan benar di kepala Anda saat Anda melihatnya. Dilengkapi dengan pengalaman.
Saya pikir contoh konkret diperlukan. Mari buat objek kelas tiruan ArrayList
dan minta metodenya size()
untuk mengembalikan angka 10. Kode lengkapnya akan terlihat seperti ini:
@ExtendWith(MockitoExtension.class)
class DoReturnTest {
@Mock
List mockList;
@Test
public void whenMockAnnotation () {
//create a rule: return 10 when calling the size method
Mockito.doReturn(10).when(mockList).size();
//the method is called here and will return 10!!
assertEquals(10, mockList.size());
}
}
Ya, kode ini akan berfungsi, pengujian tidak akan gagal.
3.2 kapan() metode
Ada cara lain untuk menambahkan aturan perilaku ke objek tiruan - dengan memanggil Mockito.when()
. Ini terlihat seperti ini:
Mockito.when(an object.method name()).thenReturn(result);
Ini adalah cara yang sama untuk menulis aturan perilaku objek tiruan seperti yang sebelumnya. Membandingkan:
Mockito.doReturn(result).when(an object).method name();
Di sini hal yang persis sama terjadi - pembuatan aturan baru.
Benar, contoh pertama memiliki dua minus:
- panggilan itu sangat membingungkan.
an object.method name()
- tidak akan berfungsi jika metode
methodname()
kembalivoid
.
Baiklah, mari tuliskan contoh favorit kita menggunakanMockito.when()
@ExtendWith(MockitoExtension.class)
class WhenTest {
@Mock
List mockList;
@Test
public void whenMockAnnotation() {
//create a rule: return 10 when calling the size method
Mockito.when(mockList.size() ).thenReturn(10);
//the method is called here and will return 10!!
assertEquals(10, mockList.size());
}
}
3.3 metode doThrow()
Kami menemukan cara membuat metode objek tiruan mengembalikan hasil tertentu. Bagaimana saya bisa membuatnya mengeluarkan pengecualian khusus? Kirim ke doReturn()
?
Untuk mencegah metode kembali, yaitu melempar pengecualian, Anda perlu mengatur aturan menggunakan doThrow()
.
Mockito.doThrow(exception.class).when(an object).method name();
Dan kemudian opsi kedua:
Mockito.when(an object.method name()).thenThrow(exception.class);
Sedikit diharapkan, bukan?
Nah, Anda lihat, Anda sudah mulai mengerti. Mari kita perbaiki dengan contoh:
@ExtendWith(MockitoExtension.class)
class DoThrowTest {
@Mock
List mockList;
@Test
public void whenMockAnnotation() {
Mockito.when(mockList.size() ).thenThrow(IllegalStateException.class);
mockList.size(); //an exception will be thrown here
}
}
Jika Anda perlu melempar objek pengecualian tertentu, gunakan konstruksi formulir:
Mockito.doThrow(new Exception()).when(an object).method name();
Cukup berikan doThrow()
objek pengecualian ke metode dan itu akan dilempar selama pemanggilan metode.