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


Ποιες είναι οι κύριες διαφορές μεταξύ του Whitebox της Powermock και του Whitebox του Mockito


Το WhiteBox της Powermock και το WhiteBox του Mockito είναι και οι δύο κατηγορίες χρησιμότητας που χρησιμοποιούνται για την πρόσβαση και τον χειρισμό εσωτερικών καταστάσεων των τάξεων, αλλά έχουν ξεχωριστές διαφορές στις προέλευσες, τις λειτουργίες τους και τα περιβάλλοντα χρήσης.

Προέλευση και διαθεσιμότητα

- WhiteBox του Mockito: Αυτή ήταν μια εσωτερική τάξη μέσα στο Mockito που επέτρεψε στους χρήστες να ορίζουν εσωτερικές καταστάσεις αντικειμένων. Ωστόσο, απομακρύνθηκε από το Mockito 2.x λόγω ανησυχιών σχετικά με την προώθηση κακών πρακτικών δοκιμών και επειδή δεν προοριζόταν για δημόσια χρήση [11]. Οι χρήστες που βασίζονταν σε αυτό ενθαρρύνθηκαν να μεταβούν σε εναλλακτικές λύσεις όπως το WhiteBox της Powermock ή να εφαρμόσουν τις δικές τους επιχειρήσεις προβληματισμού [3].

- WhiteBox της Powermock: Αυτό είναι μέρος της βιβλιοθήκης PowerMock, η οποία επεκτείνει τις δυνατότητες του Mockito επιτρέποντας το χλευάζοντας ιδιωτικές, στατικές και τελικές μεθόδους, μεταξύ άλλων χαρακτηριστικών [5]. Το WhiteBox της PowerMock παρέχει μια απλοποιημένη χρησιμότητα αντανάκλασης που προορίζεται για δοκιμές, επιτρέποντας την πρόσβαση σε ιδιωτικά μέλη και την επίκληση ιδιωτικών μεθόδων [2] [6].

λειτουργικότητα

- WhiteBox του Mockito (ιστορικό): Πριν από την απομάκρυνσή του, το WhiteBox της Mockito επέτρεψε στους χρήστες να ορίζουν εσωτερικές καταστάσεις αντικειμένων χρησιμοποιώντας μεθόδους όπως το `setInternalState '. Αυτό ήταν χρήσιμο για την έγχυση ψεύτων σε μαθήματα χωρίς δημόσιους ρυθμιστές.

- Το WhiteBox της PowerMock: προσφέρει ένα ευρύτερο σύνολο λειτουργιών, όπως:
- Πρόσβαση σε ιδιωτικά μέλη: Μέθοδοι όπως το `getInternalState` επιτρέπουν την ανάκτηση των ιδιωτικών αξιών πεδίου.
- Επικαλούμενη ιδιωτικές μεθόδους: Η μέθοδος `invokemethod` μπορεί να καλέσει ιδιωτικές μεθόδους, συμπεριλαμβανομένων των στατικών [4] [10].
- Ρύθμιση ιδιωτικών πεδίων: Αν και δεν τεκμηριώνεται ρητά, το WhiteBox της PowerMock μπορεί να χρησιμοποιηθεί για τον καθορισμό ιδιωτικών πεδίων μέσω του προβληματισμού, αν και αυτός δεν είναι ο πρωταρχικός του σκοπός.

Πλαίσιο χρήσης

- Το WhiteBox του Mockito: Δεδομένου ότι δεν είναι πλέον διαθέσιμο στο Mockito 2.x, οι χρήστες συνιστώνται να χρησιμοποιούν εναλλακτικές λύσεις όπως το WhiteBox της PowerMock ή το `ReflectionTestutils του Spring ', εάν ισχύει [1] [3].

- Το WhiteBox της Powermock: συνήθως χρησιμοποιείται σε σενάρια όπου είναι απαραίτητη η άμεση πρόσβαση σε ιδιωτικά μέλη ή μεθόδους, συχνά στον κώδικα κληρονομιάς ή όταν δοκιμάζετε πολύπλοκη λογική που δεν μπορεί εύκολα να επαναπροσδιοριστεί. Ωστόσο, συνιστάται γενικά να αποφευχθεί η χρήση τέτοιων επιχειρήσεων κοινής ωφέλειας, εκτός εάν είναι απολύτως απαραίτητο, καθώς μπορούν να παρακάμψουν την ενθυλάκωση και να οδηγήσουν σε εύθραυστες δοκιμές [10].

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

Αναφορές:
[1] https://stackoverflow.com/questions/40280918/what-do-i-use-instead-of-whitebox-in-mockito-2-2-to-set-dens
[2] https://www.javadoc.io/doc/org.powermock/powermock-reflect/1.6.5/org/powermock/reflect/whitebox.html
[3] https://proandroiddev.com/mockito-2-x-x-over-powermock-migration-tips-and-tricks-top-ten-118c52abd1d8
[4] https://johnmullins.co
[5] https://www.calsoftinc.com/blogs/unit-testing-mockito-powermockito.html
[6] https://www.javadoc.io/doc/org.powermock/powermock-reflect/latest/org/powermock/reflect/whitebox.html
[7] https://github.com/mockito/mockito/issues/422
[8] https://www.alibabacloud.com/blog/598057
[9] https://www.lambdatest.com/automation-testing-advisor/selenium/classes/org.powermock.reflect.whitebox
[10] https://github.com/powermock/powermock/wiki/bypass-encapsulation
[11] https://github.com/mockito/mockito/issues/489
[12] https://code.haleby.se/2017/02/03/a-case-for-powermock/