Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Υπάρχουν εναλλακτικές λύσεις για το hamcrest που λειτουργούν καλύτερα με το mockito


Υπάρχουν εναλλακτικές λύσεις για το hamcrest που λειτουργούν καλύτερα με το mockito


Όταν εργάζεστε με το Mockito, το Hamcrest χρησιμοποιείται συχνά για τους εκφραστικούς matchers, οι οποίοι ενισχύουν την αναγνωσιμότητα των δοκιμών. Ωστόσο, υπάρχουν εναλλακτικές λύσεις που μπορούν να λειτουργήσουν καλά με το Mockito, το καθένα με τα δικά του πλεονεκτήματα και αδυναμίες.

assertj

Το AssertJ είναι μια δημοφιλής εναλλακτική λύση για το Hamcrest για τη σύνταξη ισχυρισμών σε δοκιμές μονάδων. Παρέχει ένα άπταιστο API που πολλοί προγραμματιστές βρίσκουν ευκολότερη στη χρήση και πιο εκφραστικά από το Hamcrest. Η σύνταξη του AssertJ προτιμάται συχνά για την αναγνωσιμότητά της και τη δυνατότητα να δημιουργεί εύκολα προσαρμοσμένες ισχυρισμούς. Ενώ το AssertJ δεν ενσωματώνεται άμεσα με το Mockito όπως το Hamcrest, μπορεί να χρησιμοποιηθεί παράλληλα με το Mockito για ισχυρισμούς, καθιστώντας τις δοκιμές πιο ευανάγνωστες και συντηρητικές. Ωστόσο, το AssertJ επικεντρώνεται κυρίως σε ισχυρισμούς και όχι στις ευρύτερες δυνατότητες αντιστοίχισης του Hamcrest [1] [3].

Αλήθεια

Η αλήθεια είναι μια άλλη βιβλιοθήκη ισχυρισμού που αναπτύχθηκε από την Google. Προσφέρει ένα άπταιστο API παρόμοιο με το AssertJ, αλλά επικεντρώνεται περισσότερο στην παροχή καλύτερης υποστήριξης αυτόματης ολοκλήρωσης σε IDE, η οποία μπορεί να είναι επωφελής για την ανακάλυψη των διαθέσιμων ισχυρισμών. Η αλήθεια δεν χρησιμοποιείται τόσο συχνά με το Mockito όσο το Hamcrest, αλλά μπορεί να χρησιμοποιηθεί για ισχυρισμούς σε δοκιμές. Όπως και ο AssertJ, η αλήθεια επικεντρώνεται περισσότερο στους ισχυρισμούς και όχι στην αντιστοίχιση γενικής χρήσης που παρέχει το Hamcrest [3].

Οι ενσωματωμένοι matchers του Mockito

Το ίδιο το Mockito παρέχει matchers που μπορούν να χρησιμοποιηθούν για τις αλληλεπιδράσεις και την επαλήθευση των αλληλεπιδράσεων με ψεύτικα αντικείμενα. Αυτοί οι matchers επιστρέφουν τον τύπο που ταιριάζουν (π.χ., `any (integer.class)` Επιστρέφει ένα `ακέραιο '), το οποίο είναι διαφορετικό από τους hamcrest matchers που επιστρέφουν ένα` matcher'. Για να χρησιμοποιήσετε τους hamcrest matchers με mockito, μπορείτε να χρησιμοποιήσετε `argthat` ή` mockitohamcrest.ArgThat` για να μετατρέψετε ένα hamcrest matcher σε μια mockito-συμβατή μορφή [7].

Προσαρμοσμένες υλοποιήσεις

Για σενάρια όπου προτιμάτε να μην χρησιμοποιείτε εξωτερικές βιβλιοθήκες, μπορείτε να εφαρμόσετε τους δικούς σας αγώνες ή ισχυρισμούς. Αυτή η προσέγγιση επιτρέπει τον πλήρη έλεγχο της συμπεριφοράς και της σύνταξης, αλλά απαιτεί περισσότερη προσπάθεια και συντήρηση. Συνήθως δεν συνιστάται αν δεν έχετε πολύ συγκεκριμένες ανάγκες που δεν πληρούνται από τις υπάρχουσες βιβλιοθήκες.

Συμπέρασμα

Ενώ το Hamcrest χρησιμοποιείται ευρέως με το Mockito λόγω της ευελιξίας και της εκφραστικότητάς του, εναλλακτικές λύσεις όπως το AssertJ και η Truth μπορούν να ενισχύσουν το τμήμα ισχυρισμού των δοκιμών σας. Αν ψάχνετε για κάτι που ενσωματώνεται καλά με το Mockito για τους σκοπούς που ταιριάζουν, το Hamcrest παραμένει μια ισχυρή επιλογή, αλλά μπορείτε να χρησιμοποιήσετε τους matchers μαζί με άλλες βιβλιοθήκες ισχυρισμού για μια πιο ολοκληρωμένη εμπειρία δοκιμών. Τελικά, η επιλογή εξαρτάται από τις συγκεκριμένες ανάγκες και τις προτιμήσεις σας όσον αφορά την αναγνωσιμότητα, την ευκολία χρήσης και τον τύπο των ισχυρισμών ή των αγώνων που πρέπει να εκτελέσετε στις δοκιμές σας.

Αναφορές:
[1] https://www.reddit.com/r/java/comments/nj7dvd/who_here_are_using_the_hamcrest_api_and_why/
[2] https://www.javacodegeeks.com/2015/11/hamcrest-matchers-tutorial.html
[3] https://truth.dev/comparison.html
[4] https://www.reddit.com/r/javahelp/comments/oqz8cn/unit_testing_with_mockito_framework_why_do_we/
[5] https://www.infoworld.com/article/2257253/junit-5-tutorial-part-1-unit-testing-with-junit-5-mockito-and-hamcrest.html
[6] https://softwareengineering.stackexchange.com/questions/447953/alternatives-to-using-mock-libraries-such-as-mockito-in
[7] https://stackoverflow.com/questions/8348046/mockitos-matcher-vs-hamcrest-matcher
[8] https://stackoverflow.com/questions/12606196/what-is-the-lternative-to-use-the-deprecated-hamcrest-method-is