Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Kako se Powermock-ov mockmaker razlikuje od Mockitovega mošnega proizvajalca vgrajenega


Kako se Powermock-ov mockmaker razlikuje od Mockitovega mošnega proizvajalca vgrajenega


Powermock in Mockito se uporabljata za posmehovanje na Javi, vendar služita različnim namenom in imata različne lastnosti, zlasti pri tem, kako ravnata s posmehovanjem skozi svoje izvedbe "Mockmaker".

Powermock's Mockmaker

Powermock razširja druge knjižnice, kot sta Easymock in Mockito, z zagotavljanjem močnejših zmogljivosti. Uporablja manipulacijo s poukom in bajtodo po meri, da se omogoči norčevanje statičnih metod, konstruktorjev, končnih razredov in metod, zasebnih metod in odstranjevanja statičnih inicializatorjev [4] [9]. Powermockov "Mockmaker" izvaja razred "PowermockMaker", ki delegat pokliče na drugega "Mockmaker", če je potrebno. To omogoča Powermocku, da deluje skupaj z drugimi posmehljivimi okviri brez konfliktov, če je pravilno konfiguriran [7].

Powermockov pristop je bolj invaziven, saj zahteva manipulacijo z bajtodo, da doseže svoje napredne sposobnosti posmehovanja. To je lahko koristno za zapletene scenarije, kjer je sam Mockito nezadostna, na primer posmehovanje statičnih metod ali zasebnih metod [9].

Mockito's Mock-Maker-Line

Mockito-ov 'Mock-Maker-Inline` je predstavljena funkcija, ki omogoča norčevanje končnih razredov in metod. Ne potrebuje manipulacije z bajtodo, kot je PowerMock, ampak namesto tega uporablja Java's Instrument API za spreminjanje razredov med izvajanjem. Ta pristop je manj invaziven in ne potrebuje razreda po meri [2] [8].

Če želite omogočiti `Mock-Maker-Inline`, običajno dodate datoteko z imenom` org.mockito.plugins.mockmaker` z vsebino `mock-maker-inline` v` src/test/viri/mockito-Extensions`. Lahko pa uporabite artefakt `Mockito-Inline`, ki poenostavi postopek, tako da ne potrebuje ročne konfiguracije datoteke razširitve` mockmaker` [2] [10].

Mockito 5.0.0 in poznejše različice uporabljajo `Mock-Maker-Inline` kot privzetega proizvajalca posmeha, kar olajša norčevanje končnih razredov in metod brez dodatne konfiguracije [3] [10].

Ključne razlike

-Invazivnost: PowerMock je bolj invaziven zaradi uporabe manipulacije z bajtodo in nakladalnika po meri, medtem ko Mockito-ov "Mock-Maker-Inline" uporablja Java Instrument, ki je manj invazivna.
- Zmogljivosti: PowerMock se lahko posmehuje statičnim metodam, konstruktorjem in zasebnim metodam, ki jih Mockito ne more storiti brez dodatnih orodij, kot je "Mockito-Inline" za končne razrede in metode.
-Konfiguracija: PowerMock zahteva posebno konfiguracijo, da lahko prenesete na druge izvedbe `Mockmaker`, medtem ko je Mockito-ov` Mock-Maker-Inline "omogočiti s preprosto konfiguracijsko datoteko ali z uporabo artefakta" Mockito-Inline`.
-Privzeto vedenje: V Mockito 5 in pozneje je privzeto `Mock-Maker-Inline`, medtem ko PowerMock vedno potrebuje izrecno nastavitev za uporabo svojih naprednih funkcij.

Če povzamemo, medtem ko se tako Powermock kot Mockito-ov "mock-proizvajalec-in-line" izboljšujeta zmogljivosti posmeha, se bistveno razlikujeta po svojem pristopu, invazivnosti in vrstah posmehovanja, ki jih podpirajo. PowerMock je močnejši, a tudi bolj zapleten, medtem ko Mockito-jev "Mock-Maker-Inline" ponuja preprostejši način za posmehovanje končnih razredov in metod.

Navedbe:
[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 med-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-methods