Powermock og Mockito bruges begge til at håne i Java, men de tjener forskellige formål og har forskellige funktioner, især i, hvordan de håndterer hån gennem deres respektive 'mockmaker' implementeringer.
Powermocks mockmaker
Powermock udvider andre spotbiblioteker som EasyMock og Mockito ved at give mere kraftfulde kapaciteter. Den bruger en brugerdefineret klasselaster og bytecode -manipulation for at muliggøre hån af statiske metoder, konstruktører, slutklasser og metoder, private metoder og fjernelse af statiske initialisatorer [4] [9]. Powermocks 'Mockmaker' implementeres af klassen 'PowerMockmaker', som delegerer kalder til en anden 'mockmaker' om nødvendigt. Dette gør det muligt for PowerMock at arbejde sammen med andre hånlige rammer uden konflikter, forudsat at det er konfigureret korrekt [7].
Powermocks tilgang er mere invasiv, hvilket kræver bytekodemanipulation for at opnå sine avancerede hånlige kapaciteter. Dette kan være fordelagtigt for komplekse scenarier, hvor Mockito alene er utilstrækkelig, såsom at spotte statiske metoder eller private metoder [9].
Mockitos mock-maker-inline
Mockitos 'mock-maker-inline' er en funktion, der introduceres for at muliggøre hån af endelige klasser og metoder. Det kræver ikke bytecode -manipulation som PowerMock, men bruger i stedet Java's Instrumentation API til at ændre klasser ved kørsel. Denne tilgang er mindre invasiv og har ikke brug for en brugerdefineret klasselaster [2] [8].
For at aktivere 'mock-maker-inline' tilføjer du typisk en fil med navnet 'org.mockito.plugins.mockmaker' med indholdet 'mock-maker-inline' i 'SRC/Test/Resources/Mockito-Extensions' katalog. Alternativt kan du bruge `Mockito-Inline 'artefakt, der forenkler processen ved ikke at kræve manuel konfiguration af den` mockmaker' udvidelsesfil [2] [10].
Mockito 5.0.0 og senere versioner bruger `mock-maker-inline 'som standard mock maker, hvilket gør det lettere at spotte endelige klasser og metoder uden yderligere konfiguration [3] [10].
Nøgleforskelle
-Invasivitet: Powermock er mere invasiv på grund af dens brug af bytecode-manipulation og en brugerdefineret klasselaster, mens Mockitos 'mock-maker-inline' bruger Java-instrumentering, som er mindre invasiv.
- Funktioner: Powermock kan spotte statiske metoder, konstruktører og private metoder, som Mockito ikke kan undvære yderligere værktøjer som 'Mockito-Inline' til endelige klasser og metoder.
-Konfiguration: PowerMock kræver specifik konfiguration for at delegere til andre 'mockmaker' implementeringer, hvorimod Mockitos 'mock-maker-inline' kan aktiveres med en simpel konfigurationsfil eller ved hjælp af 'Mockito-Inline' Artifact.
-Standardadfærd: I Mockito 5 og senere er 'Mock-Maker-Inline' standard, mens PowerMock altid kræver eksplicit opsætning for at bruge sine avancerede funktioner.
Sammenfattende, mens både Powermock og Mockitos 'mock-maker-inline' forbedrer spottende kapaciteter, adskiller de sig markant i deres tilgang, invasivitet og de typer af spottende, de understøtter. Powermock er mere magtfuld, men også mere kompleks, mens Mockitos 'mock-maker-inline' tilbyder en enklere måde at spotte endelige klasser og metoder på.
Citater:[1] https://github.com/powermock/powermock/wiki/mockito
[2] https://davidvlijmaincx.com/posts/writing_higher_quality_tests_with_mockitos_inline_mock_maker/
[3] https://stackoverflow.com/questions/65986197/difference-vetween-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-test-advisor/selenium/classes/org.mockito.plugins.mockmaker
[7] https://www.lambdatest.com/automation-test-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-t-work-to-mock-finale-metoder