Οι χειρολαβές Mockito ελέγχονται και ανεξέλεγκτες εξαιρέσεις διαφορετικά, κυρίως λόγω του τρόπου με τον οποίο η Java αντιμετωπίζει αυτές τις εξαιρέσεις και πώς το Mockito έχει σχεδιαστεί για να λειτουργεί με υπογραφές μεθόδων.
ελεγμένες εξαιρέσεις
- Ορισμός: Οι ελεγμένες εξαιρέσεις είναι εξαιρέσεις που ελέγχονται κατά τη διάρκεια του χρόνου μεταγλώττισης. Πρέπει είτε να αλιεύονται σε ένα μπλοκ "Try-Catch` ή να δηλώνονται στην υπογραφή της μεθόδου χρησιμοποιώντας τη λέξη-κλειδί" ρίχνει "[3].
- Mockito Handling: Το Mockito επιτρέπει να ρίχνει ελεγμένες εξαιρέσεις από ένα ψεύτικο αντικείμενο μόνο εάν η εξαίρεση δηλώνεται στην υπογραφή της μεθόδου. Εάν προσπαθήσετε να ρίξετε μια ελεγχόμενη εξαίρεση που δεν δηλώνεται, ο Mockito θα ρίξει μια `mockitoException` με ένα μήνυμα που υποδεικνύει ότι η επιλεγμένη εξαίρεση είναι άκυρη για αυτή τη μέθοδο [1] [2]. Για παράδειγμα, εάν μια μέθοδος `void somemethod () ρίχνει iOexception`, μπορείτε να χρησιμοποιήσετε mockito για να ρίξετε μια` iOException` χωρίς προβλήματα.
Ανεξαρτημένες εξαιρέσεις
- Ορισμός: Οι ανεξέλεγκτες εξαιρέσεις είναι εξαιρέσεις που δεν ελέγχονται κατά τη διάρκεια της μεταγλώττισης. Είναι συνήθως εξαιρέσεις χρόνου εκτέλεσης ή σφάλματα που υποδηλώνουν σφάλματα προγραμματισμού [3].
- Χειρισμός Mockito: Το Mockito μπορεί εύκολα να χειριστεί ανεξέλεγκτες εξαιρέσεις χωρίς περιορισμούς. Μπορείτε να χρησιμοποιήσετε το `thenthrow ()` ή `dothrow ()` για να προσομοιώσετε ανεξέλεγκτες εξαιρέσεις όπως `runtimeException` ή` nullpointerexception` χωρίς να χρειάζεται να δηλωθούν στη μέθοδο υπογραφή [1] [2]. Αυτό καθιστά απλό για τη δοκιμή χειρισμού σφαλμάτων για απροσδόκητες συνθήκες.
Εναλλακτικές λύσεις για ελεγμένες εξαιρέσεις
Εάν πρέπει να ρίξετε μια ελεγχόμενη εξαίρεση που δεν δηλώνεται στην υπογραφή της μεθόδου, μπορείτε να χρησιμοποιήσετε τη μέθοδο του mockito `doanswer (). Αυτή η μέθοδος σάς επιτρέπει να ορίσετε προσαρμοσμένη συμπεριφορά για μια ψεύτικη μέθοδο, συμπεριλαμβανομένης της ρίψης εξαιρέσεων που δεν έχουν δηλωθεί στη μεθόδους υπογραφή [4]. Ωστόσο, αυτή η προσέγγιση απαιτεί περισσότερο χειροκίνητο χειρισμό και είναι γενικά λιγότερο απλή από τη χρήση `thenthrow ()` ή `dothrow ()`.
Συνοπτικά, ο χειρισμός των ελεγχόμενων εξαιρέσεων του Mockito είναι πιο περιοριστικός, διότι ακολουθεί τους ελέγχους της Java, ενώ οι ανεξέλεγκτες εξαιρέσεις μπορούν να ρίχνονται ελεύθερα, καθιστώντας τους ευκολότερους στη χρήση σε δοκιμές.
Αναφορές:[1] https://blog.sammkinng.in/blogs/checked-exception-is-invalid-for-this-method
[2] https://www.toptal.com/java/a-guide-to-everday-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-difference-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