PowerMock y Mockito se usan para burlarse en Java, pero tienen diferentes propósitos y tienen características distintas, particularmente en cómo manejan burlarse de sus respectivas implementaciones de 'simulacros'.
Powermock's Mockmaker
PowerMock extiende otras bibliotecas simuladas como Easymock y Mockito al proporcionar capacidades más potentes. Utiliza un cargador de clases personalizado y una manipulación de código de bytecodo para permitir la burla de métodos estáticos, constructores, clases y métodos finales, métodos privados y eliminación de inicializadores estáticos [4] [9]. La clase 'Mockmaker` de PowerMock es implementada por la clase' PowerMockmaker`, que los delegados llaman a otro 'Mockmaker` si es necesario. Esto permite que PowerMock funcione junto con otros marcos de burla sin conflictos, siempre que esté configurado correctamente [7].
El enfoque de PowerMock es más invasivo, lo que requiere la manipulación del código de byto para lograr sus capacidades de burla avanzada. Esto puede ser beneficioso para escenarios complejos en los que Mockito solo es insuficiente, como burlarse de métodos estáticos o métodos privados [9].
Mockito's Mock-Maker-Line
El `Mock-Maker-Inline` de Mockito es una característica introducida para permitir la burla de las clases y métodos finales. No requiere la manipulación de Bytecode como PowerMock, sino que usa la API de instrumentación de Java para modificar las clases en tiempo de ejecución. Este enfoque es menos invasivo y no necesita un cargador de clases personalizado [2] [8].
Para habilitar `Mock-Maker-Inline`, normalmente agrega un archivo llamado` org.mockito.plugins.mockmaker` con el contenido `maCk-maker-inline` en el directorio` src/test/recursos/mockito-extensions`. Alternativamente, puede usar el artefacto `Mockito-Inline`, que simplifica el proceso al no requerir la configuración manual del archivo de extensión 'Mockmaker` [2] [10].
Mockito 5.0.0 y las versiones posteriores utilizan `maquista-maker-inline` como el fabricante de simulacros predeterminado, lo que facilita la simulación de clases y métodos finales sin configuración adicional [3] [10].
Diferencias clave
-Invasividad: PowerMock es más invasivo debido a su uso de la manipulación de Bytecode y un cargador de clases personalizado, mientras que el `Mock-Maker-Inline` de Mockito usa la instrumentación Java, que es menos invasiva.
- Capacidades: PowerMock puede burlarse de métodos estáticos, constructores y métodos privados, que Mockito no puede hacer sin herramientas adicionales como 'Mockito-Inline` para clases y métodos finales.
-Configuración: PowerMock requiere una configuración específica para delegar a otras implementaciones de `Mockmaker`, mientras que el` Mock-Mak-Maker-Inline` de Mockito se puede habilitar con un archivo de configuración simple o utilizando el artefacto 'Mockito-Inline`.
-Comportamiento predeterminado: en Mockito 5 y posterior, `simulador-maker-inline 'es el valor predeterminado, mientras que PowerMock siempre requiere una configuración explícita para usar sus funciones avanzadas.
En resumen, mientras que tanto PowerMock como las capacidades de burla de Mockito y Mockito mejoran significativamente en su enfoque, invasividad y los tipos de burla que apoyan. PowerMock es más potente pero también más complejo, mientras que el `Mock-Maker-Inline` de Mockito ofrece una forma más simple de burlarse de las clases y métodos finales.
Citas:[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-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.powmockmaker
[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-metods