PowerMock und Mockito werden beide zum Verspotten in Java verwendet, aber sie dienen unterschiedlichen Zwecken und weisen unterschiedliche Merkmale auf, insbesondere in der Art und Weise, wie sie sich durch ihre jeweiligen "Mockmaker" -implementierungen verspotten.
PowerMocks Mockmaker
PowerMock erweitert andere Scheinbibliotheken wie Easymock und Mockito, indem sie leistungsfähigere Fähigkeiten bieten. Es verwendet eine benutzerdefinierte Manipulation von Classloader und Bytecode, um das Verspotten statischer Methoden, Konstrukteure, endgültige Klassen und Methoden, private Methoden und die Entfernung statischer Initialisierer zu ermöglichen [4] [9]. Der "Mockmaker" von PowerMock wird von der "PowerMockMaker" -Klasse implementiert, die bei Bedarf an einen anderen "Mockmaker" aufrufe. Auf diese Weise kann PowerMock ohne Konflikte mit anderen spöttischen Frameworks zusammenarbeiten, sofern er korrekt konfiguriert ist [7].
Der Ansatz von PowerMock ist invasiver und erfordert die Manipulation von Bytecode, um seine fortschrittlichen spöttischen Fähigkeiten zu erreichen. Dies kann für komplexe Szenarien von Vorteil sein, in denen Mockito allein unzureichend ist, wie z. B. verspottete statische Methoden oder private Methoden [9].
Mockitos Mock-Hersteller-Inline
Mockitos "Mock-Maker-Inline" ist eine Funktion, die ein Verspotten der endgültigen Klassen und Methoden ermöglicht. Es erfordert keine Bytecode -Manipulation wie PowerMock, sondern verwendet stattdessen die Instrumenten -API von Java, um die Klassen zur Laufzeit zu ändern. Dieser Ansatz ist weniger invasiv und benötigt keinen benutzerdefinierten Klassenloader [2] [8].
Um "Mock-Maker-Inline" zu aktivieren, fügen Sie normalerweise eine Datei mit dem Namen "org.mockito.plugins.mockmaker" mit dem Inhalt "Mock-Maker-Inline" im Verzeichnis "SRC/Test/Ressourcen/Mockito-Extensions" hinzu. Alternativ können Sie das Artefakt von "Mockito-Inline" verwenden, das den Prozess vereinfacht, indem Sie keine manuelle Konfiguration der "Mockmaker"-Erweiterungsdatei [2] [10] benötigen.
Mockito 5.0.0 und spätere Versionen verwenden "Mock-Maker-Inline" als Standard-Mock-Hersteller, was es einfacher macht, die endgültigen Klassen und Methoden ohne zusätzliche Konfiguration zu verspotten [3] [10].
Schlüsselunterschiede
-Invasivität: PowerMock ist aufgrund der Verwendung von Bytecode-Manipulation und eines benutzerdefinierten Klassenloaders invasiver, während Mockitos "Mock-Maker-Inline" Java-Instrumentierung verwendet, was weniger invasiv ist.
- Funktionen: PowerMock kann statische Methoden, Konstrukteure und private Methoden verspotteten, die Mockito nicht ohne zusätzliche Tools wie "Mockito-Inline" für endgültige Klassen und Methoden verzichten können.
-Konfiguration: PowerMock erfordert eine spezifische Konfiguration, um an andere "Mockmaker" -implementierungen zu delegieren, während Mockitos "Mock-Maker-Inline" mit einer einfachen Konfigurationsdatei oder mithilfe des "Mockito-Inline" -Artefakts aktiviert werden kann.
-Standardverhalten: In Mockito 5 und später ist "Mock-Maker-Inline" der Standard, während PowerMock immer ein explizites Setup erfordert, um seine erweiterten Funktionen zu verwenden.
Zusammenfassend lässt sich sagen, dass sowohl PowerMock als auch Mockitos "Mock-Maker-Inline" -Mockfunktionen sich erheblich in ihrem Ansatz, ihrer Invasivität und den Arten von Verspottungen unterscheiden, die sie unterstützen. PowerMock ist leistungsstärker, aber auch komplexer, während Mockitos "Mock-Maker-Inline" eine einfachere Möglichkeit bietet, endgültige Klassen und Methoden verspottet.
Zitate:[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/diffferenz-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-hods