Powermock i Mockleto są używane do kpiny w Javie, ale służą różnym celom i mają odrębne cechy, szczególnie w tym, jak poradzą sobie z kpinami poprzez odpowiednie implementacje „Mockmaker”.
Powermock's Mockmaker
Powermock rozszerza inne próbne biblioteki, takie jak Easymock i Mockleto, zapewniając mocniejsze możliwości. Wykorzystuje niestandardową manipulację klasą i kodem bajtowym, aby umożliwić kpiny metod statycznych, konstruktorów, klas końcowych i metod, metod prywatnych i usuwania statycznych inicjalizatorów [4] [9]. „Mockmaker” PowerMock jest zaimplementowany przez klasę „PowerMockMaker”, która w razie potrzeby delegacja połączeń do innego „Mockmaker”. Umożliwia to Powermock wraz z innymi kpiącymi ramami bez konfliktów, pod warunkiem, że jest on poprawnie skonfigurowany [7].
Podejście PowerMock jest bardziej inwazyjne, wymagające manipulacji bajtami w celu uzyskania zaawansowanych możliwości kpiny. Może to być korzystne dla złożonych scenariuszy, w których sam Mockito jest niewystarczający, takich jak kpiny metody statyczne lub metody prywatne [9].
Mockito's Mock-Mock-In-INLINE
Mockito's „Mock-Maker-Inline” to funkcja wprowadzona w celu pozwalająca na kpiny z końcowych klas i metod. Nie wymaga manipulacji bajtami, takiej jak PowerMock, ale używa interfejsu API oprzyrządowania Java do modyfikowania klas w czasie wykonywania. Takie podejście jest mniej inwazyjne i nie wymaga niestandardowego ładownika [2] [8].
Aby włączyć `próba-inline ', zwykle dodajesz plik o nazwie` org.mockito.plugins.mockmaker` z content `Mock-Maker-Inline' w katalogu` SRC/test/Resources/Mocchito-Extensions '. Alternatywnie możesz użyć artefaktu „mockito-inline”, który upraszcza proces, nie wymagając ręcznej konfiguracji pliku rozszerzenia „Mockmaker” [2] [10].
Wersje Mockito 5.0.0 i nowsze używają „Mock-Maker-Inline” jako domyślnego próbnego producenta, co ułatwia kpiny z końcowych klas i metod bez dodatkowej konfiguracji [3] [10].
Kluczowe różnice
-Inwazyjność: PowerMock jest bardziej inwazyjny ze względu na użycie manipulacji bajtodą i niestandardowego ładowarki, a Mockleto „Mock-Maker-Inline” używa oprzyrządowania Java, który jest mniej inwazyjny.
- Możliwości: PowerMock może kpić ze statycznych metod, konstruktorów i prywatnych metod, których Mockleto nie może się obejść bez dodatkowych narzędzi, takich jak „Mockito-inline” dla końcowych klas i metod.
-Konfiguracja: PowerMock wymaga określonej konfiguracji do delegowania na inne implementacje „Mockmaker`”, podczas gdy Mocchito „Mock-Maker-Inline” można włączyć za pomocą prostego pliku konfiguracyjnego lub za pomocą artefaktu „Mockito-inline”.
-Domyślne zachowanie: W Mockito 5 i nowszym „Mock-Maker-Inline jest domyślnie, podczas gdy PowerMock zawsze wymaga jawnej konfiguracji, aby korzystać z jego zaawansowanych funkcji.
Podsumowując, podczas gdy zarówno Powermock, jak i Mockito `` próba producenta-inline 'zwiększają zdolności kpiny, różnią się znacznie pod względem podejścia, inwazyjności i rodzajów kpiny, które wspierają. Powermock jest mocniejszy, ale także bardziej złożony, podczas gdy Mockito „Mock-Maker-Inline” oferuje prostszy sposób na wyśmiewanie końcowych zajęć i metod.
Cytaty:[1] https://github.com/powermock/powermock/wiki/mockito
[2] https://davidvlijmincx.com/posts/writing_higer_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-mockoto-vs-mockoto-alone
[10] https://stackoverflow.com/questions/53274463/what-is-mockoto-inline-and-how-does-it-work-to-mock-final-methods