Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Hur skiljer sig PowerMocks Mockmaker från Mockitos Mock-Maker-Inline


Hur skiljer sig PowerMocks Mockmaker från Mockitos Mock-Maker-Inline


PowerMock och Mockito används båda för att håna i Java, men de tjänar olika syften och har distinkta funktioner, särskilt i hur de hanterar hån genom sina respektive "Mockmaker" -implementeringar.

PowerMocks hockmaker

PowerMock utvidgar andra håliga bibliotek som EasyMock och Mockito genom att tillhandahålla mer kraftfulla kapacitet. Den använder en anpassad klasslastare och bytekodmanipulation för att möjliggöra spott av statiska metoder, konstruktörer, slutklasser och metoder, privata metoder och borttagning av statiska initialiserare [4] [9]. PowerMocks "Mockmaker" implementeras av klassen "PowerMockaker", som delegerar kallar till en annan "Mockmaker" om det behövs. Detta gör att PowerMock kan arbeta tillsammans med andra hånliga ramar utan konflikter, förutsatt att den är konfigurerad korrekt [7].

PowerMocks strategi är mer invasivt och kräver bytekodmanipulation för att uppnå sina avancerade hånfunktioner. Detta kan vara fördelaktigt för komplexa scenarier där mockito ensam är otillräcklig, såsom hånande statiska metoder eller privata metoder [9].

Mockitos mock-maker-inline

Mockitos "Mock-Maker-Inline" är en funktion som introduceras för att möjliggöra hån av slutklasser och metoder. Det kräver inte bytekodmanipulation som PowerMock utan använder istället Java's Instrumentation API för att modifiera klasser vid körning. Detta tillvägagångssätt är mindre invasivt och behöver inte en anpassad klasslastare [2] [8].

För att aktivera "hålig maker-inline" lägger du vanligtvis till en fil som heter "org.mockito.plugins.mockmaker" med innehållet "Mock-maker-inline" i "SRC/Test/Resources/Mockito-Extensions" -katalogen. Alternativt kan du använda "Mockito-Inline" -artifakten, vilket förenklar processen genom att inte kräva manuell konfiguration av förlängningsfilen "Mockmaker" [2] [10].

Mockito 5.0.0 och senare versioner använder "Mock-maker-inline" som standardmocktillverkaren, vilket gör det enklare att håna slutklasser och metoder utan ytterligare konfiguration [3] [10].

Nyckelskillnader

-Invasivitet: PowerMock är mer invasiv på grund av dess användning av bytekodmanipulation och en anpassad klasslastare, medan Mockitos "Mock-Maker-Inline" använder Java-instrumentering, vilket är mindre invasivt.
- Funktioner: PowerMock kan håna statiska metoder, konstruktörer och privata metoder, vilket Mockito inte kan göra utan ytterligare verktyg som `mockito-inline för slutklasser och metoder.
-Konfiguration: PowerMock kräver specifik konfiguration för att delegera till andra "mockmaker" -implementeringar, medan Mockitos "Mock-Maker-Inline" kan aktiveras med en enkel konfigurationsfil eller genom att använda "mockito-inline" -artefakten.
-Standardbeteende: I Mockito 5 och senare är "Mock-Maker-Inline" standard, medan PowerMock alltid kräver uttrycklig installation för att använda sina avancerade funktioner.

Sammanfattningsvis, medan både PowerMock och Mockitos "Mock-Maker-Inline" förbättrar hånliga förmågor, skiljer de sig avsevärt i deras tillvägagångssätt, invasivitet och de typer av hån de stöder. PowerMock är mer kraftfull men också mer komplex, medan Mockitos "Mock-Maker-Inline" erbjuder ett enklare sätt att håna slutklasser och metoder.

Citeringar:
[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/differference-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-finalen