Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Ποιες είναι οι κύριες διαφορές μεταξύ Mockito Matchers και Hamcrest Matchers


Ποιες είναι οι κύριες διαφορές μεταξύ Mockito Matchers και Hamcrest Matchers


Οι Mockito Matchers και Hamcrest Matchers χρησιμοποιούνται και οι δύο στη Java για τη δημιουργία δοκιμαστικών ισχυρισμών, αλλά εξυπηρετούν διαφορετικούς σκοπούς και έχουν ξεχωριστά χαρακτηριστικά.

mathito matchers

Οι Mockito Matchers χρησιμοποιούνται κυρίως για τη δημιουργία προσδοκιών ή επαληθεύσεων όταν εργάζονται με ψεύτικα αντικείμενα. Αυτοί οι matchers επιστρέφουν τον τύπο του αντικειμένου που ταιριάζει, το οποίο τους επιτρέπει να χρησιμοποιούνται άμεσα ως επιχειρήματα σε μεθόδους κλήσεις σε ψεύτικα αντικείμενα. Για παράδειγμα, `org.mockito.matchers.any (Integer.class)` Επιστρέφει ένα `ακέραιο», καθιστώντας το κατάλληλο για χρήση σε μεθόδους stubbing ή επαλήθευση, όπως `όταν (mockfoo.getbarbyindex (integer.class)))` [1].

Οι Mockito Matchers έχουν σχεδιαστεί για να λειτουργούν άψογα με το Mockito Mocking Framework, επιτρέποντάς σας να καθορίσετε ευέλικτες προσδοκίες για κλήσεις μεθόδων σε ψεύτικα αντικείμενα. Ωστόσο, δεν χρησιμοποιούνται τυπικά με «δηλώσεις», οι οποίες συνδέονται συχνότερα με το Hamcrest.

hamcrest matchers

Οι Hamcrest Matchers, από την άλλη πλευρά, έχουν σχεδιαστεί για να χρησιμοποιούνται με δηλώσεις "assertThat` για την επιβεβαίωση των συνθηκών σε δοκιμές. Επιστρέφουν ένα αντικείμενο `matcher`, το οποίο είναι ένα πρόβατο που μπορεί να χρησιμοποιηθεί για να αξιολογήσει εάν πληρούται μια κατάσταση. Οι Hamcrest Matchers είναι εξαιρετικά ευέλικτοι και μπορούν να συνδυαστούν χρησιμοποιώντας λογικούς χειριστές όπως το `allof ',` anyof' και `όχι για να δημιουργήσουν πολύπλοκες ισχυρισμούς [2] [3].

Οι Hamcrest Matchers χρησιμοποιούνται ευρέως σε συνδυασμό με το Junit και άλλα πλαίσια δοκιμών για να γράψουν σαφείς και ευανάγνωστες δοκιμαστικές δοκιμές. Παρέχουν ένα άπταιστο API που καθιστά τον κώδικα δοκιμής πιο αυτο-τεκμηρίωση και πιο κατανοητή. Για παράδειγμα, `assertththat (" hello ", equalto (" hello "))` σαφώς επικοινωνεί την πρόθεση του ισχυρισμού [7].

Ενσωμάτωση μεταξύ Mockito και Hamcrest

Σε περιπτώσεις όπου θέλετε να χρησιμοποιήσετε ένα hamcrest matcher σε ένα πλαίσιο που απαιτεί ένα mockito matcher (π.χ. stubbing ή επαλήθευση μιας κλήσης μεθόδου), το Mockito παρέχει τη μέθοδο `argthat`. Αυτή η μέθοδος σας επιτρέπει να τυλίξετε ένα hamcrest matcher και να το χρησιμοποιήσετε ως mockito matcher. Για παράδειγμα, όταν (mockfoo.getbarbydouble (argthat (closeto (1,0, 0,001))) `χρησιμοποιεί ένα hamcrest matcher για να καθορίσει μια κατάσταση για μια διπλή τιμή με κάποια ακρίβεια [1] [5].

Στο Mockito 2 και αργότερα, η ενσωμάτωση με το Hamcrest αντιμετωπίζεται μέσω της κατηγορίας `Mockitohamcrest`, η οποία παρέχει μια μέθοδο` argthat` ειδικά σχεδιασμένη για να συνεργάζεται με hamcrest matchers [5] [10]. Αυτή η αποσύνδεση βοηθά στην αποφυγή συγκρούσεων εκδοχής μεταξύ βιβλιοθηκών Mockito και Hamcrest.

Συνοπτικά, οι Mockito Matchers χρησιμοποιούνται κυρίως για κοροϊδευτικά και stubbing, ενώ οι hamcrest matchers χρησιμοποιούνται για ισχυρισμούς. Και οι δύο μπορούν να χρησιμοποιηθούν από κοινού σε δοκιμές, αξιοποιώντας τη μέθοδο `argthat` για να ενσωματώσουν τα matchers Hamcrest στο Mockito του Mocking Framework.

Αναφορές:
[1] https://stackoverflow.com/questions/8348046/mockitos-matcher-vs-hamcrest-matcher
[2] https://www.javacodegeeks.com/2015/11/hamcrest-matchers-tutorial.html
[3] https://www.vogella.com/tutorials/hamcrest/article.html
[4] https://support.intershop.com/kb/go.php/a/enfdevdoc/pages/1827636063/guide+-+7.10+migration+mockito+1+to+mockito+2
[5] https://site.mockito.org/javadoc/current/org/mockito/hamcrest/mockitohamcrest.html
[6] https://www.baeldung.com/hamcrest-text-matchers
[7] https://automatenow.io/complete-guide-to-hamcrest-matchers/
[8] https://www.scalatest.org/scaladoc/3.0.7/org/scalatest/matchers.html
[9] https://hamcrest.org/javahamcrest/tutorial
[10] https://www.lambdatest.com/automation-testing-advisor/selenium/methods/org.mockito.hamcrest.mockitohamcrest.argthat