Το Mockito παρέχει δύο μεθόδους που μπορούν να χρησιμοποιηθούν για τη διαχείριση της κατάστασης των ψαριών κατά τη διάρκεια των δοκιμών: `reset ()` και `clearVocations ()`. Ενώ και οι δύο μέθοδοι χρησιμοποιούνται για τη διαχείριση της ψεύτικης κατάστασης, εξυπηρετούν διαφορετικούς σκοπούς και έχουν ξεχωριστά αποτελέσματα στα ψεύτικα.
Mockito's `reset ()` Μέθοδος
Η μέθοδος `reset ()` στο mockito χρησιμοποιείται για να επαναφέρει ένα ψεύτικο αντικείμενο εξ ολοκλήρου. Αυτό σημαίνει ότι όχι μόνο καθαρίζει την επίκληση μετράει, αλλά επίσης αφαιρεί κάθε stubbing που έχει τοποθετηθεί στο ψεύτικο. Αυτό μπορεί να είναι προβληματικό, διότι απαιτεί να επαναπροσδιορίσετε το ψεύτικο μετά την επαναφορά του εάν θέλετε να διατηρήσετε συγκεκριμένη συμπεριφορά για τις δοκιμές σας. Η χρήση του `reset ()` είναι γενικά αποθαρρυνθεί επειδή μπορεί να οδηγήσει σε πολύπλοκες και λιγότερο εστιασμένες δοκιμές. Συνιστάται να αποφύγετε τη χρήση `reset ()` αν δεν είναι απολύτως απαραίτητο, καθώς μπορεί να αποκρύψει την πρόθεση των δοκιμών σας και να τους κάνει πιο δύσκολο να διατηρηθούν [1] [5] [7].
Mockito's `ClearInvocations ()` Μέθοδος
Η μέθοδος `ClearInvocations ()`, που εισήχθη στο Mockito 2.1, σας επιτρέπει να καθαρίσετε τις μετρήσεις της επίκλησης ενός ψεύτικου χωρίς να επαναφέρετε το stubbing του. Αυτό σημαίνει ότι μπορείτε να συνεχίσετε να χρησιμοποιείτε τα ίδια στελέχη, εξασφαλίζοντας παράλληλα ότι κάθε δοκιμή ξεκινά με μια καθαρή πλάκα σχετικά με τις επικλήσεις μεθόδων. Αυτή η μέθοδος είναι χρήσιμη όταν πρέπει να επαληθεύσετε τις αλληλεπιδράσεις σε ένα κρατικό σενάριο ή όταν χρησιμοποιείτε πλαίσια έγχυσης εξάρτησης, αλλά θα πρέπει να χρησιμοποιηθεί ακόμα με φειδώ. Συνιστάται γενικά να αποφευχθεί η χρήση των «ClearVocations ()» εκτός εάν είναι απαραίτητο, καθώς μπορεί επίσης να περιπλέξει τις δοκιμές εάν δεν χρησιμοποιηθεί προσεκτικά [1] [4] [9].
βασικές διαφορές
- stubbing: `reset ()` Αφαιρεί όλα τα stubbing, απαιτώντας σας να επαναπροσδιορίσετε το ψεύτικο, ενώ `clearvocations ()` αφήνει το stubbing άθικτο.
- Counts Counts: Και οι δύο μέθοδοι είναι σαφείς μετράει η επίκληση, αλλά το `reset () το κάνει ως μέρος μιας πλήρους επαναφοράς, ενώ οι` ClearVocations () `συγκεκριμένα στοχεύει μετράνε την επίκληση.
- Δοκιμή πολυπλοκότητας: Και οι δύο μέθοδοι μπορούν να οδηγήσουν σε πιο πολύπλοκες δοκιμές, αν δεν χρησιμοποιηθούν προσεκτικά, αλλά το `reset ()` τείνει να προκαλέσει περισσότερα προβλήματα λόγω της ανάγκης να επαναπροσδιοριστούν τα ψεύτικα.
Συνοπτικά, ενώ και οι δύο μέθοδοι μπορούν να χρησιμοποιηθούν για τη διαχείριση της ψεύτικης κατάστασης, `reset ()` είναι πιο επεμβατική και γενικά αποθαρρυντική, ενώ 'ClearVocations () `είναι πιο στοχευμένη, αλλά θα πρέπει να χρησιμοποιηθεί με σύνεση για να διατηρηθεί καθαρές και εστιασμένες δοκιμές.
Αναφορές:[1] https://softwareengineering.stackexchange.com/questions/188299/is-this-an-appriate-use-of-mockitos-reset-method
[2] https://www.lambdatest.com/automation-testing-advisor/selenium/methods/org.mockito.internal.mockitocore.clearinvocations
[3] https://www.lambdatest.com/automation-testing-advisor/selenium/methods/org.mockito.internal.mockitocore.clearallcaches
[4] https://www.lambdatest.com/automation-testing-advisor/selenium/methods/org.mockito.mockito.clearinvocations
[5] https://stackoverflow.com/questions/19441538/what-is-the-correct-alternative-to-resetting-a-mock-after-setup-in-mockito
[6] https://reflectoring.io/clean-unit-tests-with-mockito/
[7] https://stackoverflow.com/questions/30081161/mockito-does-verify-method-reboot-number-of-times
[8] https://javadoc.io/doc/org.mockito/mockito-core/2.25.1/org/mockito/mockito.html
[9] https://wesome.org/mockito-3-clear-invocations
[10] https://github.com/mockk/mockk/discussions/842