Οι σχολιασμοί στο Mockito χρησιμοποιούνται οι σχολιασμοί στο Mockito χρησιμοποιούνται οι σχολιασμοί στο Mockito για τη δημιουργία ψεύτικων μαθημάτων για δοκιμές μονάδων σε εφαρμογές DART και Flutter. Ενώ και οι δύο σχολιασμοί εξυπηρετούν τον ίδιο πρωταρχικό σκοπό, διαφέρουν σημαντικά στη συμπεριφορά τους όταν χειρίζονται τις κλήσεις μεθόδους που δεν έχουν υποβληθεί σε επαφή.
@generatemocks
- Συμπεριφορά για τις μεθόδους που δεν έχουν υποβιβαστεί: Όταν μια μέθοδος καλείται ένα ψεύτικο αντικείμενο που δημιουργείται με `@generatemocks` και δεν έχει καθοριστεί κανένα στέλεχος για τη μέθοδο αυτή, το Mockito θα ρίξει μια εξαίρεση. Αυτή η συμπεριφορά εξασφαλίζει ότι ορίζετε ρητά τα stubs για όλες τις μεθόδους που αναμένεται να καλούνται κατά τη διάρκεια μιας δοκιμής, συμβάλλοντας στην κατάρτιση πιθανών παραβιάσεων στη ρύθμιση των δοκιμών.
- Χρήση: Αυτός ο σχολιασμός χρησιμοποιείται τυπικά όταν θέλετε αυστηρό έλεγχο της συμπεριφοράς των ψαριών σας, εξασφαλίζοντας ότι τυχόν απροσδόκητες κλήσεις μεθόδους επισημαίνονται αμέσως ως σφάλματα.
- Κατάσταση απόρριψης: `@generatemocks` θεωρείται λιγότερο συνιστώμενη σε σύγκριση με το`@generatenicemocks` λόγω της αυστηρής συμπεριφοράς του, η οποία μπορεί να οδηγήσει σε πιο λεπτομερή δοκιμαστικό κώδικα εάν δεν διαχειρίζεται προσεκτικά.
@generatenicemocks
- Συμπεριφορά για μεθόδους που δεν έχουν υποβιβαστεί: Αντίθετα, τα ψεύτικα που παράγονται με το `@generatenicemocks` θα επιστρέψουν μια προεπιλεγμένη, νομική τιμή για τον τύπο επιστροφής της μεθόδου όταν καλείται μια μέθοδος unstubbed. Αυτή η προεπιλεγμένη τιμή δεν προορίζεται για χρήση στη λογική δοκιμής, αλλά χρησιμεύει για την πρόληψη των σφαλμάτων χρόνου εκτέλεσης λόγω μηδενικών ή ελλείψεων τιμών.
- Χρήση: Αυτός ο σχολιασμός συνιστάται για τις περισσότερες περιπτώσεις χρήσης, επειδή απλοποιεί τη γραφή των δοκιμών μειώνοντας την ανάγκη να πετάξει κάθε πιθανή κλήση μεθόδου. Κάνει τις δοκιμές πιο ισχυρές, αποφεύγοντας τις αποτυχίες λόγω ξεχασμένων στελεχών.
- Πρόσθετες λειτουργίες: `@generatenicemocks` επιτρέπει μόνο` mockspec 'στη λίστα των επιχειρημάτων του, παρέχοντας μεγαλύτερη ευελιξία στην προσαρμογή των παραγόμενων ψεύτικων τάξεων. Για παράδειγμα, μπορείτε να καθορίσετε ένα προσαρμοσμένο όνομα για την κλάση Mock χρησιμοποιώντας την παράμετρο `AS` στο` mockspec`.
βασικές διαφορές
1. Χειρισμός των μεθόδων Unstubbed: Η πιο σημαντική διαφορά είναι ο τρόπος με τον οποίο κάθε σχολιασμός χειρίζεται τις μεθόδους που καλεί χωρίς ρητές στελέχη. `@Generatemocks` ρίχνει μια εξαίρεση, ενώ το`@generatenicemocks` επιστρέφει μια προεπιλεγμένη τιμή.
2. Κωδικός απλότητα και ευρωστία: `@generatenicemocks` γενικά οδηγεί σε απλούστερο και πιο ισχυρό κώδικα δοκιμής, μειώνοντας την ανάγκη για εξαντλητική παύση.
3. Προσαρμογή: `@generatenicemocks` Προσφέρει περισσότερες επιλογές προσαρμογής μέσω` mockspec`, επιτρέποντας τα προσαρμοσμένα ονόματα κλάδων και άλλες προηγμένες διαμορφώσεις.
Συνοπτικά, το `@generatenicemocks` προτιμάται γενικά για την ικανότητά του να απλοποιεί τον κώδικα δοκιμής και να μειώνει τα σφάλματα λόγω των μη επιθετικών μεθόδων, ενώ το`@generatemocks` παρέχει μια αυστηρότερη προσέγγιση που μπορεί να είναι χρήσιμη σε συγκεκριμένα σενάρια όπου απαιτείται ρητός έλεγχος της ψεύτικης συμπεριφοράς [1] [4] [11].
Αναφορές:[1] https://www.amaysim.technology/blog/flutter-test-mockito-generatemocks-vs-generatenicemocks
[2] https://www.reddit.com/r/golang/comments/ua0hps/generated_vs_handwritten_mocks/
[3] https://blog.logrockocket.com/unit-testing-flutter-code-mockito/
[4] https://pub.dev/documentation/mockito/latest/annotations/generatenicemocks-class.html
[5] https://plugins.jetbrains.com/plugin/23513-generate-flutter-mocks
[6] https://stackoverflow.com/questions/72390220/flutter-generatemocks-is-not-generated-mock-class
[7] https://github.com/dart-lang/mockito/blob/master/null_safety_readme.md
[8] https://github.com/dart-lang/mockito/issues/367
[9] https://github.com/dart-lang/mockito/issues/422
[10] https://stackoverflow.com/questions/74406977/the-generatemocks-annotation-contains-a-class-hhich-appears-to-arready-be-mocked
[11] https://pub.dev/packages/mockito