Mockito menguji metode void melempar pengecualian


399

Saya punya metode dengan voidtipe pengembalian. Itu juga bisa melempar sejumlah pengecualian sehingga saya ingin menguji pengecualian yang dilemparkan. Semua upaya gagal dengan alasan yang sama:

Metode ketika (T) dalam tipe Stubber tidak berlaku untuk argumen (batal)

Adakah ide bagaimana saya bisa mendapatkan metode untuk melempar pengecualian yang ditentukan?

doThrow(new Exception()).when(mockedObject.methodReturningVoid(...));

Jawaban:


706

Tanda kurung ditempatkan dengan buruk. Anda harus menggunakan

doThrow(new Exception()).when(mockedObject).methodReturningVoid(...);
                                          ^

dan tidak

doThrow(new Exception()).when(mockedObject.methodReturningVoid(...));
                                                                   ^

Ini dijelaskan dalam dokumentasi


7
@edwardmlyte Ketidakkonsistenan Mockito ini adalah salah satu alasan saya beralih ke MoxieMocks
Muel

@clement keduanya dapat digunakan: docs.mockito.googlecode.com/hg/latest/org/mockito/… . Membuat pengecualian tidak membuangnya.
JB Nizet

1
@JB Nizet Saya sangat setuju dengan Anda tetapi jika saya menulis doThrow (new Exception ()) alih-alih doThrow (Exception.class), saya memiliki kesalahan berikut ketika saya meluncurkan pengujian saya; Diharapkan pengecualian com.company.project.exception.ElementNotFoundException tapi punya org.mockito.exceptions.base.MockitoException:
clement

2
Ajukan pertanyaan lain, dengan kode yang diuji, kode tes, dan jejak tumpukan pengecualian.
JB Nizet

6
doThrow (Pengecualian baru ()). when (objek) .voidMethod (any ());
Soumyajit Swain

14

Jika Anda pernah bertanya-tanya bagaimana cara melakukannya dengan menggunakan gaya BDD baru Mockito:

willThrow(new Exception()).given(mockedObject).methodReturningVoid(...));

Dan untuk referensi di masa mendatang, seseorang mungkin perlu melemparkan pengecualian dan kemudian tidak melakukan apa pun:

willThrow(new Exception()).willNothing().given(mockedObject).methodReturningVoid(...));

1
Terima kasih telah memposting ini di sini; jika metode mengembalikan nilai: diberikan (mockedObject.methodReturningAnObject ()). willThrow (new Exception ()); jika metode tersebut tidak mengembalikan apa pun: willThrow (new Exception ()). diberikan (mockedObject) .methodReturningVoid (...)); Penjelasan bentuk javadoc: "Rongga penghentian memerlukan pendekatan yang berbeda dari {@link Mockito # when (Object)} (atau BDDMockito.given) karena kompiler tidak menyukai metode batal di dalam tanda kurung ..."
Wolf359
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.