Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Ποιες είναι οι κοινές εξαιρέσεις όταν χρησιμοποιείτε το PowerMock με το Mockito 2.x


Ποιες είναι οι κοινές εξαιρέσεις όταν χρησιμοποιείτε το PowerMock με το Mockito 2.x


Όταν χρησιμοποιείτε το PowerMock με το Mockito 2.x, μπορούν να προκύψουν αρκετές κοινές εξαιρέσεις και ζητήματα λόγω προβλημάτων συμβατότητας και αλλαγών στο Mockito API. Εδώ είναι μερικές από τις πιο συνηθισμένες εξαιρέσεις και πώς να τις αντιμετωπίσετε:

1. Noclassdeffounderror: org.mockito.cglib.proxy.methodinterceptor **

Αυτή η εξαίρεση συμβαίνει όταν χρησιμοποιείται η λανθασμένη επέκταση API PowerMock. Η επέκταση `PowerMock-Api-Mockito` δεν λειτουργεί με το Mockito 2.x, οδηγώντας σε αυτό το σφάλμα. Για να το διορθώσετε, θα πρέπει να χρησιμοποιήσετε την επέκταση "PowerMock-Api-Mockito2" [1] [2].

2. Ασυμβίβαστες εκδόσεις του Mockito και του PowerMock **

Η χρήση ασυμβίβαστων εκδόσεων του Mockito και του PowerMock μπορεί να οδηγήσει σε διάφορες εξαιρέσεις. Για παράδειγμα, το PowerMock 1.6.5 έχει πειραματική υποστήριξη για το Mockito 2.x, αλλά δεν είναι αξιόπιστο. Βεβαιωθείτε ότι χρησιμοποιείτε συμβατές εκδόσεις, όπως το PowerMock 1.7.0 RC2 με το Mockito 2.1.0 [1] [2].

3. ΠαράνομοAccessError με mockito 2.7.1 **

Όταν χρησιμοποιείτε το PowerMock 1.6.5 ή 1.7.0 RC2 με το Mockito 2.7.1, μπορείτε να συναντήσετε ένα «παράνομο (παράνομο». Αυτό το ζήτημα επιλύεται χρησιμοποιώντας το PowerMock 1.7.0 RC4 [1] [4].

4. RuntimeExceptionProxy στο Mockito 2.x με PowerMock **

Στο Mockito 2.x με το PowerMock, οι πρωτότυπες εξαιρέσεις είναι τυλιγμένες ως `RuntimeExceptionProxy '. Αυτό απαιτεί τροποποίηση σχολιασμών δοκιμών από `@test (αναμενόμενο = someException.class)` to `@test (αναμενόμενο = exception.class)` για να πιάσει τις περιτυλιγμένες εξαιρέσεις [1].

5.

Το Mockito 2.x αφαιρεθεί το Whitebox, οπότε η χρήση του WhiteBox του PowerMock μπορεί να οδηγήσει σε `fieldNotFoundException '. Εάν συμβεί αυτό, σκεφτείτε να γράψετε τη δική σας υλοποίηση ή να επαναπροσδιορίσετε τον κωδικό σας για καλύτερη δοκιμασία [1] [2].

6. UnfinishedStubbingException **

Αυτή η εξαίρεση μπορεί να συμβεί ακόμη και όταν το stubbing φαίνεται σωστή. Βεβαιωθείτε ότι δεν υπάρχουν ενσωματωμένες ψεύτικες δημιουργίες μέσα σε μεθόδους stubbing και ότι όλα τα stubbing ολοκληρώνονται σωστά με μεθόδους όπως `thenReturn ()` ή `thenthrow ()` [3].

7. Ζητήματα συμβατότητας με νεότερες εκδόσεις mockito **

Το PowerMock μπορεί να μην είναι συμβατό με νεότερες εκδόσεις Mockito, όπως το Mockito 4.0.0. Σε τέτοιες περιπτώσεις, η χρήση μιας παλαιότερης έκδοσης του Mockito που είναι συμβατή με το PowerMock μπορεί να είναι απαραίτητη [10].

Συνολικά, η μετανάστευση στο Mockito 2.x από το Mockito 1.x με το PowerMock περιλαμβάνει την αντιμετώπιση αυτών των προβλημάτων συμβατότητας και ενδεχομένως δοκιμών refactoring για να αποφευχθεί η χρήση του Powermock συνολικά [1] [4].

Αναφορές:
[1] https://proandroiddev.com/mockito-2-x-x-over-powermock-migration-tips-and-tricks-top-ten-118c52abd1d8
[2] https://dzone.com/articles/mockito-2x-over-powermock-migration-top-10-tips-and-tricks
[3] https://stackoverflow.com/questions/33441494/mockito-powermockito-weird-stubbing-exception
[4] https://proandroiddev.com/mockito-2-x-x-migration-session-recording-droidcon-uk-2018-ba70619f3811111111111919191919.
[5] https://github.com/powermock/powermock/issues/706
[6] https://github.com/mockito/mockito/issues/1606
[7] https://stackoverflow.com/questions/69394651/cannot-run-powermock-due-to-noxpected-exception-and-org-mockito-exceptions-
[8] https://stackoverflow.com/questions/61208743/powermock-with-mockito-dependencies-issue
[9] https://groups.google.com/g/powermock/c/3g5z_t1rdzq
[10] https://github.com/powermock/powermock/issues/1109