Saya ingin menggunakan Mockito untuk menguji kode (yang disederhanakan) di bawah ini. Saya tidak tahu bagaimana memberi tahu Mockito untuk gagal pertama kali, lalu berhasil untuk kedua kalinya.
for(int i = 1; i < 3; i++) {
String ret = myMock.doTheCall();
if("Success".equals(ret)) {
log.write("success");
} else if ( i < 3 ) {
log.write("failed, but I'll try again. attempt: " + i);
} else {
throw new FailedThreeTimesException();
}
}
Saya dapat menyiapkan tes sukses dengan:
Mockito.when(myMock).doTheCall().thenReturn("Success");
Dan uji kegagalan dengan:
Mockito.when(myMock).doTheCall().thenReturn("you failed");
Tapi bagaimana saya bisa menguji bahwa jika gagal sekali (atau dua kali) lalu berhasil, tidak masalah?
doThrow(new RuntimeException()).doNothing().when(myMock).doTheCall();
Cara terpendek untuk menulis apa yang Anda inginkan adalah
Saat Anda memberikan beberapa argumen untuk
thenReturn
seperti ini, setiap argumen akan digunakan paling banyak sekali, kecuali untuk argumen terakhir, yang digunakan sebanyak yang diperlukan. Misalnya, dalam kasus ini, jika Anda melakukan panggilan 4 kali, Anda akan mendapatkan "Sukses", "Anda gagal", "Anda gagal", "Anda gagal".sumber
Karena komentar yang berkaitan dengan ini sulit dibaca, saya akan menambahkan jawaban yang diformat.
Jika Anda mencoba melakukan ini dengan
void
fungsi yang hanya mengeluarkan pengecualian, diikuti dengan langkah tanpa perilaku, Anda akan melakukan sesuatu seperti ini:sumber
Untuk menambahkan ini dan jawaban ini , Anda juga dapat menggunakan loop untuk merangkai panggilan palsu. Ini berguna jika Anda perlu mengejek hal yang sama beberapa kali, atau mengejek dalam beberapa pola.
Misalnya (meskipun terlalu dibuat-buat):
sumber
Saya memiliki situasi yang berbeda, saya ingin mengejek suatu
void
fungsi untuk panggilan pertama dan menjalankannya secara normal pada panggilan kedua.Ini bekerja untuk saya:
sumber