Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Πώς διαφέρει ο Mockmaker του Powermock από το mock-maker-inline του Mockito


Πώς διαφέρει ο Mockmaker του Powermock από το mock-maker-inline του Mockito


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

Mockmaker του Powermock

Το Powermock επεκτείνει άλλες ψεύτικες βιβλιοθήκες όπως το Easymock και το Mockito παρέχοντας πιο ισχυρές δυνατότητες. Χρησιμοποιεί ένα προσαρμοσμένο χειρισμό classloader και bytecode για να επιτρέψει την κοροϊδία των στατικών μεθόδων, των κατασκευαστών, των τελικών τάξεων και των μεθόδων, των ιδιωτικών μεθόδων και της απομάκρυνσης των στατικών αρχικοποιητών [4] [9]. Το «Mockmaker» του Powermock εφαρμόζεται από την κλάση «PowerMockmaker», η οποία μεταβιβάζει κλήσεις σε άλλο «mockmaker» αν χρειαστεί. Αυτό επιτρέπει στο Powermock να λειτουργεί παράλληλα με άλλα ψεύτικα πλαίσια χωρίς συγκρούσεις, υπό την προϋπόθεση ότι έχει διαμορφωθεί σωστά [7].

Η προσέγγιση του Powermock είναι πιο επεμβατική, απαιτώντας χειρισμό του bytecode για την επίτευξη των προχωρημένων δυνατοτήτων του. Αυτό μπορεί να είναι ευεργετικό για σύνθετα σενάρια όπου μόνο το mockito είναι ανεπαρκές, όπως οι ψεύτικες στατικές μεθόδους ή οι ιδιωτικές μεθόδους [9].

Mockito's Mock-Maker-Inline

Το `mock-maker-inline 'του Mockito είναι ένα χαρακτηριστικό που εισάγεται για να επιτρέψει την κοροϊδία των τελικών τάξεων και μεθόδων. Δεν απαιτεί χειρισμό του bytecode όπως το PowerMock, αλλά χρησιμοποιεί το API Instrumentation της Java για να τροποποιήσει τις τάξεις κατά το χρόνο εκτέλεσης. Αυτή η προσέγγιση είναι λιγότερο επεμβατική και δεν χρειάζεται προσαρμοσμένο classloader [2] [8].

Για να ενεργοποιήσετε το `mock-maker-inline`, συνήθως προσθέτετε ένα αρχείο που ονομάζεται` org.mockito.plugins.mockmaker` με το περιεχόμενο `mock-maker-inline` στον κατάλογο SRC/Test/Resources/Mockito-Extensions. Εναλλακτικά, μπορείτε να χρησιμοποιήσετε το Artifact `mockito-inline ', το οποίο απλοποιεί τη διαδικασία μη απαιτώντας χειροκίνητη διαμόρφωση του αρχείου επέκτασης' Mockmaker '[2] [10].

Το Mockito 5.0.0 και οι μεταγενέστερες εκδόσεις χρησιμοποιούν το `mock-maker-inline 'ως τον προεπιλεγμένο mock maker, καθιστώντας ευκολότερο να ψεύδεις τελικές τάξεις και μεθόδους χωρίς πρόσθετη διαμόρφωση [3] [10].

βασικές διαφορές

-Invasivity: Το Powermock είναι πιο επεμβατικό λόγω της χρήσης του χειρισμού του bytecode και ενός προσαρμοσμένου classloader, ενώ το Mockito's `mock-maker-inline χρησιμοποιεί τα όργανα Java, το οποίο είναι λιγότερο επεμβατικό.
- Δυνατότητες: Το Powermock μπορεί να παραπλανήσει τις στατικές μέθοδοι, τους κατασκευαστές και τις ιδιωτικές μεθόδους, τις οποίες το mockito δεν μπορεί να κάνει χωρίς πρόσθετα εργαλεία όπως το `mockito-inline 'για τελικές τάξεις και μεθόδους.
-Διαμόρφωση: Το PowerMock απαιτεί συγκεκριμένη διαμόρφωση για να μεταβιβαστεί σε άλλες υλοποιήσεις `mockmaker`, ενώ το Mockito's` mock-maker-inline 'μπορεί να ενεργοποιηθεί με ένα απλό αρχείο διαμόρφωσης ή χρησιμοποιώντας το Artifact' Mockito-inline '.
-Προεπιλεγμένη συμπεριφορά: Στο Mockito 5 και αργότερα, το "Mock-Maker-Inline" είναι η προεπιλογή, ενώ η PowerMock απαιτεί πάντα ρητή εγκατάσταση για να χρησιμοποιήσει τα προηγμένα χαρακτηριστικά του.

Συνοπτικά, ενώ τόσο η Powermock όσο και η Mockito's `mock-maker-inline 'ενισχύουν τις δυνατότητες κοροϊδευτικών δυνατοτήτων, διαφέρουν σημαντικά στην προσέγγισή τους, την εισβολή και τους τύπους των κοροϊδευτικών που υποστηρίζουν. Το Powermock είναι πιο ισχυρό αλλά και πιο περίπλοκο, ενώ το `mock-maker-inline 'του Mockito προσφέρει έναν απλούστερο τρόπο για να χλευάζετε τις τελικές τάξεις και μεθόδους.

Αναφορές:
[1] https://github.com/powermock/powermock/wiki/mockito
[2] https://davidvlijmincx.com/posts/writing_higher_quality_tests_with_mockitos_inline_mock_maker/
[3] https://stackoverflow.com/questions/65986197/difference-between-mockito-core-vs-mockito-inline
[4] https://powermock.github.io
[5] https://javadoc.io/static/org.mockito/mockito-core/3.2.4/org/mockito/plugins/inlinemockmaker.html
[6] https://www.lambdatest.com/automation-testing-advisor/selenium/classes/org.mockito.plugins.mockmaker
[7] https://www.lambdatest.com/automation-testing-advisor/selenium/classes/org.powermock.api.mockito.mockmaker.powermockmaker
[8] https://davidvlijmincx.com/posts/mockito_mock_final_methods_and_classes/
[9] https://stackoverflow.com/questions/6036450/powermock-mockito-vs-mockito-alone
[10] https://stackoverflow.com/questions/53274463/what-is-mockito-inline-and-how-does-it-work-to-meth-methods