„PowerMock“ ir „Mockito“ yra naudojami tyčiojant iš „Java“, tačiau jie tarnauja skirtingiems tikslams ir turi skirtingas bruožus, ypač tai, kaip jie elgiasi tyčiojant iš savo atitinkamų „Mockmaker“ įgyvendinimų.
„PowerMock's Mockmaker“
„PowerMock“ pratęsia kitas pavyzdžių bibliotekas, tokias kaip „Easymock“ ir „Mockito“, suteikdamos galingesnes galimybes. Jis naudoja pasirinktinį klasikinio kroviklį ir manipuliavimą baitų kodu, kad būtų galima tyrinėti statinius metodus, konstruktorius, galutines klases ir metodus, privačius metodus ir statinių iniciatorių pašalinimą [4] [9]. „PowerMock“ „Mockmaker“ įgyvendina „PowerMockmaker“ klasė, kuri prireikus deleguoja skambučius į kitą „Mockmaker“. Tai leidžia „PowerMock“ dirbti kartu su kitomis tyčiojimosi sistemomis be konfliktų, jei jis yra sukonfigūruotas teisingai [7].
„PowerMock“ požiūris yra labiau invazinis, todėl reikia manipuliavimo baitų kodu, kad būtų pasiektos pažangios tyčiojimosi galimybės. Tai gali būti naudinga sudėtingiems scenarijams, kai vien „Mockito“ yra nepakankamas, pavyzdžiui, tyčiojantis iš statinių metodų ar privačių metodų [9].
„Mockito“ „Mock-Maker-Inline“
„Mockito“ „MOCK-Maker-Inline“ yra funkcija, įvesta, leidžianti tyčiojant iš galutinių klasių ir metodų. Tam nereikia manipuliavimo „Bytecode“, pavyzdžiui, „PowerMock“, bet vietoj to naudoja „Java“ prietaisų API, kad modifikuotų klases vykdymo metu. Šis požiūris yra mažiau invazinis ir jam nereikia pasirinktinio klasės krovinio [2] [8].
Norėdami įjungti „Mock-Maker-Inline“, paprastai pridedate failą, pavadintą „org.mockito.plugins.mockmaker“ su turiniu „Mock-Maker-Inline“ „SRC/Test/Resources“/„Mockito-Extensions“ kataloge. Arba galite naudoti „Mockito-Inline“ artefaktą, kuris supaprastina procesą, nereikalaudami rankinės „Mockmaker“ plėtinio failo konfigūracijos [2] [10].
„Mockito 5.0.0“ ir vėlesnėse versijose kaip numatytąjį „Mock“ gamintoją naudoja „modelio gamintojas-inline“, todėl bus lengviau tyčia galutines klases ir metodus be papildomos konfigūracijos [3] [10].
Pagrindiniai skirtumai
-Invaziškumas: „PowerMock“ yra labiau invazinis dėl to, kad jis naudoja manipuliavimą baito kodu ir pasirinktiniu klasės krovintuvu, o „Mockito“ „modelio gamintojo ir inliniko“ naudoja „Java“ prietaisus, o tai yra mažiau invazinė.
- Gebėjimai: „PowerMock“ gali tyčiojasi iš statinių metodų, konstruktorių ir privačių metodų, kurių „Mockito“ negali padaryti be papildomų įrankių, tokių kaip „mockito-inline“ galutinėms klasėms ir metodams.
-Konfigūracija: „PowerMock“ reikalauja konkrečios konfigūracijos, kad būtų galima deleguoti į kitus „makmaver“ įgyvendinimus, o „Mockito“ „modelio gamintojo-inline“ gali būti įjungtas naudojant paprastą konfigūracijos failą arba naudojant „Mockito-Inline“ artefaktą.
-Numatytasis elgesys: „Mockito 5“ ir vėliau „Mock-Maker-Inlin“ yra numatytasis, tuo tarpu „PowerMock“ visada reikalauja aiškios sąrankos, kad būtų galima naudoti savo pažangias funkcijas.
Apibendrinant galima pasakyti, kad ir „PowerMock“, ir „Mockito“ „modelio gamintojas-inline“ padidina tyčiojimosi galimybes, jos labai skiriasi savo požiūriu, invazija ir jų palaikomais tyčiojimosi tipais. „PowerMock“ yra galingesnis, bet ir sudėtingesnis, tuo tarpu „Mockito“ „modelio gamintojas-inline“ siūlo paprastesnį būdą iš galutinių klasių ir metodų.
Citatos:[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-bethewide-mockito-core-vs-nocko-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-how-mock-final-methods