Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Hogyan különbözik a PowerMock Mockmaker a Mockito Mock Maker-Inline-től


Hogyan különbözik a PowerMock Mockmaker a Mockito Mock Maker-Inline-től


A PowerMock -ot és a Mockito -t egyaránt használják a Java -ban való gúnyolódáshoz, de különféle célokat szolgálnak, és különálló tulajdonságokkal rendelkeznek, különös tekintettel arra, hogy miként kezelik a gúnyolódást a „Mockmaker” megvalósításaik révén.

PowerMock Mockmaker

A PowerMock kiterjeszti más modellkönyvtárakat, mint például az EasyMock és a Mockito, erősebb képességek biztosításával. Egyéni osztálytöltővel és bytecode manipulációval használja a statikus módszerek, a konstruktorok, a végső osztályok és a módszerek, a magán módszerek és a statikus inicializátorok eltávolításának lehetővé tételét [4] [9]. A PowerMock „Mockmaker” -ét a „PowerMockmaker” osztály hajtja végre, amely szükség esetén egy másik „Mockmaker” -re küldi a hívásokat. Ez lehetővé teszi a PowerMock számára, hogy más gúnyolódási keretekkel együtt dolgozzon konfliktusok nélkül, feltéve, hogy helyesen van konfigurálva [7].

A PowerMock megközelítése invazívabb, és a fejlett gúnyolódási képességek elérése érdekében bytecode manipulációt igényel. Ez hasznos lehet az összetett forgatókönyveknél, ahol önmagában a Mockito nem elegendő, például statikus módszerek gúnyolódása vagy magán módszerek [9].

Mockito Mock-Maker-Inline

A Mockito „Mock-Maker-Inline” egy olyan szolgáltatás, amely bevezeti a végső osztályok és módszerek gúnyolódását. Nem igényel olyan bytecode manipulációt, mint például a PowerMock, hanem a Java műszeres API -ját használja az osztályok futásidejében történő módosításához. Ez a megközelítés kevésbé invazív, és nincs szüksége egyedi osztálytöltőre [2] [8].

A „Mock-Maker-Inline” engedélyezéséhez általában egy „org.mockito.plugins.mockmaker” elnevezésű fájlt ad hozzá, a „Mock-Maker-Inline” tartalommal a „SRC/TEST/Resources/Mockito Extensions” című könyvtárban. Alternatív megoldásként használhatja a „Mockito-Inline” tárgyat, amely egyszerűsíti a folyamatot azáltal, hogy nem igényel a „Mockmaker” kiterjesztési fájl kézi konfigurálását [2] [10].

A Mockito 5.0.0 és későbbi verziók alapértelmezett Mock Makerként használják a „Mock-Maker-Inline” -et, megkönnyítve a végső osztályok és módszerek kigúnyolását további konfiguráció nélkül [3] [10].

kulcsfontosságú különbségek

-Invazivitás: A PowerMock invazívabb a bytecode manipuláció és az egyéni osztálytöltő használata miatt, míg a Mockito „Mock-Maker-Inline” a Java műszereket használja, amely kevésbé invazív.
- Képességek: A PowerMock képes statikus módszereket, konstruktorokat és privát módszereket gúnyolni, amelyeket a Mockito nem tehet további eszközök nélkül, mint például a „Mockito-Inline” a végső osztályokhoz és módszerekhez.
-Konfiguráció: A PowerMock speciális konfigurációt igényel, hogy átruházjon más „Mockmaker” megvalósításokra, míg a Mockito „Mock-Maker-Inline” egyszerű konfigurációs fájl segítségével vagy a „Mockito-inline` artifact használatával engedélyezhető.
-Alapértelmezett viselkedés: A Mockito 5-ben és később a „Mock-Maker-Inline” az alapértelmezett, míg a PowerMock mindig kifejezett beállítást igényel a fejlett funkciók használatához.

Összefoglalva: bár mind a PowerMock, mind a Mockito „Mock-Maker-Inline” fokozza a gúnyolási képességeket, megközelítésükben, invazivitásukban és az általuk támogatott gúnyolódásban jelentősen különböznek egymástól. A PowerMock erősebb, de összetettebb is, míg a Mockito „Mock-Maker-Inline” egyszerűbb módját kínálja a végső osztályok és módszerek gúnyolására.

Idézetek:
[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-mock-final-dods