Οι Mockito Argument Matchers είναι ισχυρά εργαλεία που χρησιμοποιούνται στη δοκιμή μονάδων για να καθορίσουν ευέλικτα επιχειρήματα κατά τη δημιουργία ψεύτων. Ωστόσο, έρχονται με αρκετούς περιορισμούς:
1. Πλαίσιο χρήσης: Οι αγώνες επιχειρήματος μπορούν να χρησιμοποιηθούν μόνο στο πλαίσιο των μεθόδων απόκτησης ή επαλήθευσης. Δεν μπορούν να χρησιμοποιηθούν κατά την κλήση μεθόδων στο υπό δοκιμή αντικειμένου. Για παράδειγμα, δεν μπορείτε να χρησιμοποιήσετε `anyString ()` όταν καλείτε μια μέθοδο σε ένα πραγματικό αντικείμενο. Αντ 'αυτού, θα πρέπει να χρησιμοποιήσετε μια τιμή σκυροδέματος [1] [5].
2. Συμφώνο σε όλα τα επιχειρήματα: Όταν χρησιμοποιείτε έναν αγώνα επιχειρήματος για ένα επιχείρημα, όλα τα άλλα επιχειρήματα πρέπει επίσης να χρησιμοποιούν matchers. Δεν μπορείτε να αναμειγνύετε τους αντιστοίχους με τιμές σκυροδέματος για διαφορετικά επιχειρήματα στην ίδια κλήση μεθόδου. Πρόκειται για μια κοινή πηγή του `ventaveDuseOfmatchersexception '[7] [8].
3. Περιορισμοί Mocking: Το Mockito δεν μπορεί να κοροϊδεύει ορισμένες μεθόδους όπως `equals ()`, `hashcode ()` ή τελικές μεθόδους. Ενώ οι αγώνες επιχειρήματος μπορούν να χρησιμοποιηθούν με μεθόδους που μπορούν να χλευαστούν, δεν επεκτείνουν την ικανότητα να χλευάζουν αυτές τις περιορισμένες μεθόδους [3].
4. Τύποι αντιστοίχισης επιχειρήματος: Το Mockito παρέχει μια ποικιλία ενσωματωμένων αγώνων επιχειρήματος (π.χ., `anyint ()` `anyString ()`, `isnull ()`), αλλά πρέπει να επιλέξετε τον σωστό τύπο για το επιχείρημα. Για παράδειγμα, η χρήση "οποιουδήποτε ()" με πρωτόγονο τύπο ενδέχεται να μην λειτουργεί όπως αναμενόταν. Αντ 'αυτού, χρησιμοποιήστε ένα πιο συγκεκριμένο matcher όπως `anyboolean ()` για παραμέτρους boolean [7].
5. Οι προσαρμοσμένοι αγώνες επιχειρήματος: Ενώ το Mockito σας επιτρέπει να δημιουργήσετε προσαρμοσμένους matchers χρησιμοποιώντας τη μέθοδο `argthat ()`, η εφαρμογή της διεπαφής 'argumentMatcher' απαιτεί προσεκτική εξέταση για να εξασφαλιστεί ότι ο matcher συμπεριφέρεται όπως αναμένεται σε διαφορετικά σενάρια [2] [4].
6. Ενσωμάτωση με άλλες βιβλιοθήκες: Όταν χρησιμοποιείτε mockito με άλλες βιβλιοθήκες όπως το Hamcrest, βεβαιωθείτε ότι η ενσωμάτωση αντιμετωπίζεται σωστά. Για παράδειγμα, το Sonarqube μπορεί να επισημάνει ορισμένες χρήσεις του `argthat ()` με τους hamcrest matchers ως λανθασμένες, ακόμη και αν είναι έγκυρες [4].
Συνοπτικά, ενώ οι mathuments matchers είναι ευπροσάρμοστες, η χρήση τους περιορίζεται σε συγκεκριμένα πλαίσια και απαιτεί συνέπεια μεταξύ των επιχειρημάτων. Επιπλέον, δεν ξεπερνούν τους θεμελιώδεις περιορισμούς του Mockito σχετικά με ορισμένες μεθόδους ή τάξεις.
Αναφορές:[1] https://groups.google.com/g/mockito/c/ul9ymczqnky
[2] https://kenkousen.substack.com/p/tales-from-the-jar-side-a-mockito
[3] https://ioflood.com/blog/mockito/
[4] https://community.sonarsource.com/t/problem-with-java-rule-s6073-mockito-argument-matchers-in-case- of-usage-mockitohamcrest-adapter/38429
[5] https://groups.google.com/g/mockito/c/zi6pcqudtco
[6] https://www.lambdatest.com/automation-testing-advisor/selenium/methods/org.mockito.argumentmatchers.isnull
[7] https://stackoverflow.com/questions/16458136/mockito-invalid-use-of-argument-matchers
[8] https://www.baeldung.com/mockito-argument-matchers