PowerMock en Mockito worden beide gebruikt voor het spotten in Java, maar ze dienen verschillende doeleinden en hebben verschillende functies, vooral in hoe ze omgaan met spotten door hun respectieve 'mockmaker' -implementaties.
PowerMock's Mockmaker
PowerMock breidt andere nepbibliotheken uit zoals Easymock en Mockito door krachtigere mogelijkheden te bieden. Het maakt gebruik van een aangepaste classloader- en bytecode -manipulatie om spotten van statische methoden, constructors, eindklassen en methoden, privémethoden en verwijdering van statische initialisaters mogelijk te maken [4] [9]. PowerMock's `MockMaker` wordt geïmplementeerd door de` PowerMockMaker` -klasse, die delegeert, roept indien nodig een andere 'mockmaker' aan. Hierdoor kan PowerMock zonder conflicten samenwerken met andere spotkaders, op voorwaarde dat het correct is geconfigureerd [7].
De aanpak van PowerMock is meer invasief, waardoor bytecode -manipulatie nodig is om zijn geavanceerde spotmogelijkheden te bereiken. Dit kan gunstig zijn voor complexe scenario's waarbij Mockito alleen onvoldoende is, zoals spottende statische methoden of privémethoden [9].
Mockito's mock-maker-inline
Mockito's `mock-maker-inline` is een functie geïntroduceerd om de spot van laatste klassen en methoden mogelijk te maken. Het vereist geen bytecode -manipulatie zoals PowerMock, maar gebruikt in plaats daarvan de instrumentatie -API van Java om klassen tijdens runtime te wijzigen. Deze aanpak is minder invasief en heeft geen aangepaste ClassLoader [2] [8] nodig.
Om `mock-maker-inline` in te schakelen, voegt u meestal een bestand met de naam` org.mockito.plugins.mockmaker` toe met de inhoud `mock-maker-inline` in de` src/test/bronnen/mockito-extensions`-directory. Als alternatief kunt u het `mockito-inline'-artefact gebruiken, dat het proces vereenvoudigt door geen handmatige configuratie van het` mockmaker`-extensiebestand [2] [10] te vereisen.
Mockito 5.0.0 en latere versies gebruiken `mock-maker-inline` als standaard mock maker, waardoor het gemakkelijker is om eindklassen en methoden zonder extra configuratie te bespotten [3] [10].
Belangrijkste verschillen
-invasiviteit: PowerMock is meer invasief vanwege het gebruik van bytecode-manipulatie en een aangepaste classloader, terwijl Mockito's `mock-maker-inline` Java-instrumentatie gebruikt, wat minder invasief is.
- Mogelijkheden: PowerMock kan statische methoden, constructors en privémethoden bespotten, die Mockito niet kunnen doen zonder extra tools zoals 'Mockito-Inline' voor eindklassen en methoden.
-Configuratie: PowerMock vereist een specifieke configuratie om te delegeren naar andere `mockmaker`-implementaties, terwijl de` mock-maker-inline 'van Mockito kan worden ingeschakeld met een eenvoudig configuratiebestand of door het gebruik van de `mockito-inline` artifact te gebruiken.
-Standaardgedrag: in Mockito 5 en later is `mock-maker-inline` de standaardinstelling, terwijl PowerMock altijd expliciete installatie vereist om zijn geavanceerde functies te gebruiken.
Samenvattend, terwijl zowel PowerMock als Mockito's 'mock-maker-inline' spotmogelijkheden verbeteren, verschillen ze aanzienlijk in hun aanpak, invasiviteit en de soorten spot die ze ondersteunen. PowerMock is krachtiger maar ook complexer, terwijl Mockito's 'Mock-Maker-Inline' een eenvoudigere manier biedt om eindklassen en methoden te bespotten.
Citaten:[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- tussen-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-mockitoalone
[10] https://stackoverflow.com/questions/53274463/what-is-mockito-inline-and-how-do-it-it-it-to-mock-final-methoden