Mockito menangani pengecualian yang diperiksa dan tidak dicentang secara berbeda, terutama karena bagaimana Java memperlakukan pengecualian ini dan bagaimana mockito dirancang untuk bekerja dengan tanda tangan metode.
pengecualian yang diperiksa
- Definisi: Pengecualian yang diperiksa adalah pengecualian yang diperiksa pada waktu kompilasi. Mereka harus terperangkap dalam blok `try-catch` atau dinyatakan dalam tanda tangan metode menggunakan kata kunci` lemparan` [3].
- Penanganan mockito: Mockito memungkinkan pengecualian yang diperiksa dari objek tiruan hanya jika pengecualian dinyatakan dalam tanda tangan metode. Jika Anda mencoba melempar pengecualian yang diperiksa yang tidak dinyatakan, Mockito akan melempar `mockitoException` dengan pesan yang menunjukkan bahwa pengecualian yang diperiksa tidak valid untuk metode itu [1] [2]. Misalnya, jika metode `void somemethod () melempar ioException`, Anda dapat menggunakan mockito untuk melempar` ioException` tanpa masalah.
pengecualian yang tidak dicentang
- Definisi: Pengecualian yang tidak dicentang adalah pengecualian yang tidak diperiksa pada waktu kompilasi. Mereka biasanya merupakan pengecualian runtime atau kesalahan yang menunjukkan kesalahan pemrograman [3].
- Penanganan mockito: Mockito dapat dengan mudah menangani pengecualian yang tidak dicentang tanpa batasan apa pun. Anda dapat menggunakan `thenthrow ()` atau `dothrow ()` untuk mensimulasikan pengecualian yang tidak dicentang seperti `runtimeException` atau` nullpointerexception` tanpa perlu mereka dinyatakan dalam tanda tangan metode [1] [2]. Ini membuatnya langsung untuk menguji penanganan kesalahan untuk kondisi yang tidak terduga.
Penanganan solusi untuk pengecualian yang diperiksa
Jika Anda perlu melempar pengecualian yang diperiksa yang tidak dinyatakan dalam tanda tangan metode, Anda dapat menggunakan metode mockito `doanswer ()`. Metode ini memungkinkan Anda untuk mendefinisikan perilaku khusus untuk metode tiruan, termasuk melempar pengecualian yang tidak dinyatakan dalam tanda tangan metode [4]. Namun, pendekatan ini membutuhkan lebih banyak penanganan manual dan umumnya kurang mudah daripada menggunakan `thenthrow ()` atau `dothrow ()`.
Singkatnya, penanganan Mockito atas pengecualian yang diperiksa lebih ketat karena menganut pemeriksaan waktu kompilasi Java, sementara pengecualian yang tidak terkendali dapat dilemparkan dengan bebas, membuatnya lebih mudah digunakan dalam tes.
Kutipan:[1] https://blog.sammkinng.in/blogs/checked-exception-is-invalid-for-this-method
[2] https://www.toptal.com/java/a-guide-to-everyday-mockito
[3] https://rollbar.com/blog/how-to-handle-checked-unchecked-exceptions-in-java/
[4] https://stackoverflow.com/questions/3762047/throw-checked-exceptions-from-mocks-with-mockito
[5] https://stackoverflow.com/questions/38852392/mockito-diference-between-thenthrowexception-class-and-thenthrownew-excepti
[6] https://www.reddit.com/r/java/comments/1cct4iq/if_everyone_hates_checked_exceptions_wheres_the/
[7] https://www.janbasktraining.com/community/java/throw-checked-exceptions-from-mocks-with-mockito
[8] https://www.youtube.com/watch?v=6-gj2w2ycmi
[9] https://www.browserstack.com/guide/mockito-throw-exception