Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Ποιες είναι οι βέλτιστες πρακτικές για την επαναφορά των ψεύτων στο mockito


Ποιες είναι οι βέλτιστες πρακτικές για την επαναφορά των ψεύτων στο mockito


Η επαναφορά του Mocks στο Mockito είναι ένα χαρακτηριστικό που σας επιτρέπει να επαναχρησιμοποιήσετε τα ψεύτικα αντικείμενα με την εκκαθάριση του stubbing και των αλληλεπιδράσεών τους. Ωστόσο, η χρήση `reset ()` γενικά αποθαρρύνεται αν δεν είναι απολύτως απαραίτητο, καθώς μπορεί να υποδεικνύει κακώς δομημένες δοκιμές. Ακολουθούν μερικές βέλτιστες πρακτικές για την επαναφορά των ψεύτων στο Mockito:

Κατανόηση πότε να χρησιμοποιήσετε `reset ()`

-Αποφύγετε τη χρήση `reset ()`: Ο πρωταρχικός λόγος `reset ()` υπάρχει είναι να υποστηρίξει τα ψαρέματα που εγχύθηκαν με δοχεία, όπως αυτά που χρησιμοποιούνται στον κώδικα κληρονομιάς ή στις διεπαφές τρίτων. Στις περισσότερες περιπτώσεις, ειδικά με καλά σχεδιασμένο κώδικα με δοκιμή, θα πρέπει να αποφύγετε τη χρήση `reset ()` και αντ 'αυτού να εστιάσετε στη δημιουργία μικρών, εστιασμένων μεθόδων δοκιμής [2] [4].

- Κωδικός μυρωδιά: Εάν βρεθείτε να χρησιμοποιείτε το `reset ()` μέσα σε μια μέθοδο δοκιμής, μπορεί να είναι ένα σημάδι ότι οι δοκιμές σας είναι πολύ περίπλοκες ή καλύπτουν πάρα πολλά σενάρια. Αυτό θα μπορούσε να υποδεικνύει την ανάγκη να επαναπροσδιοριστούν τις δοκιμές σας ή στον έλεγχο κώδικα [2].

εναλλακτικές λύσεις για `reset ()`

- Δημιουργήστε νέα ψεύτικα: Αντί να επαναφέρετε τα ψεύτικα, σκεφτείτε τη δημιουργία νέων ψεύτικων περιπτώσεων για κάθε μέθοδο δοκιμής. Αυτή η προσέγγιση εξασφαλίζει ότι κάθε δοκιμή ξεκινά με καθαρό σχιστόλιθο, μειώνοντας τον κίνδυνο αλληλεπιδράσεων από προηγούμενες δοκιμές που επηρεάζουν το τρέχον [4].

- Χρησιμοποιήστε `ClearInvocations ()`: Εάν χρειάζεται μόνο να καθαρίσετε το ιστορικό επίκλησης (π.χ., για να επαληθεύσετε τις αλληλεπιδράσεις χωρίς να επηρεάσετε το stubbing), χρησιμοποιήστε `mockito.clearinvocations ()`. Αυτή η μέθοδος αφαιρεί το ιστορικό επίκλησης χωρίς επαναφορά των stubs, τα οποία μπορεί να είναι χρήσιμα σε ορισμένα σενάρια [4].

Βέλτιστες πρακτικές για την επαναφορά των ψεύτων

- Επαναφορά μετά από κάθε δοκιμή: Εάν πρέπει να επαναφέρετε το ψεύτικο, το κάνετε μετά από κάθε μέθοδο δοκιμής χρησιμοποιώντας ένα `@after 'σχολιασμό στο Junit ή` aftereach () `σε scalatest. Αυτό εξασφαλίζει ότι κάθε δοκιμή ξεκινά με μια καθαρή ψεύτικη κατάσταση [3] [10].

- Αποφύγετε την επαναφορά πριν από τις δοκιμές: Η επαναφορά του ψεύτικου πριν από κάθε δοκιμή μπορεί να οδηγήσει σε σύγχυση σχετικά με την κατάσταση που το ψεύτικο είναι στην αρχή της δοκιμής. Είναι γενικά πιο ξεκάθαρο να δημιουργήσετε νέα ψεύτικα ή να επαναφέρετε μετά από δοκιμές [10].

- Χρησιμοποιήστε χαρακτηριστικά πλαισίου: Σε πλαίσια όπως η άνοιξη, χρησιμοποιώντας σχολιασμούς όπως το `@mockbean` μπορεί να χειριστεί αυτόματα την ψεύτικη επαναφορά μετά από κάθε δοκιμή, εξαλείφοντας την ανάγκη για χειροκίνητη επαναφορά [10].

Συμπέρασμα

Ενώ το Mockito παρέχει τη μέθοδο `reset ()` για συγκεκριμένες περιπτώσεις χρήσης, είναι γενικά σκόπιμο να αποφευχθεί η χρήση του υπέρ του καθαρότερου, πιο εστιασμένου σχεδιασμού δοκιμών. Με τη δημιουργία νέων ψαριών για κάθε δοκιμή ή τη χρήση χαρακτηριστικών πλαισίου για να διαχειριστείτε την ψεύτικη κατάσταση, μπορείτε να εξασφαλίσετε ισχυρές και διατηρήσιμες δοκιμές χωρίς την ανάγκη για χειροκίνητη επαναφορά.

Αναφορές:
[1] https://www.tutorialspoint.com/mockito/mockito_resetting_mock.htm
[2] https://site.mockito.org/javadoc/current/org/mockito/mockito.html
[3] https://twitter.github.io/finatra/user-guide/testing/mocks.html
[4] https://softwareengineering.stackkexchange.com/questions/188299/is-this-an-appriate-use-of-mockitos-reset-method
[5] https://github.com/mockito/mockito-kotlin/issues/513
[6] https://symflower.com/en/company/blog/2024/how-to-do-mocking-spring-boot/
[7] https://www.lambdatest.com/automation-testing-advisor/selenium/methods/org.mockito.mockito.reset
[8] https://github.com/mockito/mockito/issues/183
[9] https://www.toptal.com/java/a-guide-to-everyday-mockito
[10] https://stackoverflow.com/questions/18164123/how-to-clean-up-mocks-in-spring-tests-when-using-mockito