O PowerMock e o Mockito são usados para zombar de Java, mas servem a propósitos diferentes e têm recursos distintos, particularmente na maneira como lidam com a zombaria através de suas respectivas implementações de 'Mockmaker'.
Mockmaker da PowerMock
O PowerMock estende outras bibliotecas simuladas, como Easymock e Mockito, fornecendo recursos mais poderosos. Ele usa um carregador de classe personalizado e manipulação de bytecode para permitir zombar de métodos estáticos, construtores, classes e métodos finais, métodos privados e remoção de inicializadores estáticos [4] [9]. O `Mockmaker 'do PowerMock é implementado pela classe' PowerMockmaker`, que delega chamadas para outro 'Mockmaker`, se necessário. Isso permite que o PowerMock funcione ao lado de outras estruturas de zombaria sem conflitos, desde que seja configurado corretamente [7].
A abordagem do PowerMock é mais invasiva, exigindo a manipulação do bytecode para alcançar seus recursos avançados de zombaria. Isso pode ser benéfico para cenários complexos em que o Mockito sozinho é insuficiente, como zombar de métodos estáticos ou métodos privados [9].
Mockito Mock-Maker-Inline
O `Mock-in-inline 'da Mockito é um recurso introduzido para permitir zombar das classes e métodos finais. Não requer manipulação de bytecode como o PowerMock, mas usa a API de instrumentação do Java para modificar as classes em tempo de execução. Essa abordagem é menos invasiva e não precisa de um carregador de classe personalizado [2] [8].
Para ativar o 'Mock-In-In-Inline', você normalmente adiciona um arquivo chamado `org.mockito.plugins.mockmaker` com o conteúdo" Mock-in-in-inline "no diretório` SRC/Test/Resources/Mockito-Extensões ". Como alternativa, você pode usar o artefato 'Mockito-Inline`, que simplifica o processo por não exigir a configuração manual do arquivo de extensão' Mockmaker '[2] [10].
O Mockito 5.0.0 e as versões posteriores usam o `Mock-Inline 'como o Maker padrão de simulação, facilitando a zombaria das classes e métodos finais sem configuração adicional [3] [10].
Diferenças -chave
-Invasão: o PowerMock é mais invasivo devido ao uso da manipulação do bytecode e a um carregador de classe personalizado, enquanto o `Mock Mock-Inline 'da Mockito usa a instrumentação Java, o que é menos invasivo.
- Recursos: o PowerMock pode zombar de métodos estáticos, construtores e métodos privados, que o Mockito não pode fazer sem ferramentas adicionais como 'Mockito-Inline' para classes e métodos finais.
-Configuração: o PowerMock requer configuração específica para delegar a outras implementações de 'Mockmaker', enquanto o `Mock-Inline 'do Mockito pode ser ativado com um arquivo de configuração simples ou usando o artefato` Mockito-In-Inline`.
-Comportamento padrão: no Mockito 5 e posterior, `Mock Making-Inline` é o padrão, enquanto o PowerMock sempre requer configuração explícita para usar seus recursos avançados.
Em resumo, enquanto o 'Mockito-Inline' da Powermock e Mockito aprimoram as capacidades de zombaria, elas diferem significativamente em sua abordagem, invasividade e os tipos de zombaria que apóiam. O PowerMock é mais poderoso, mas também mais complexo, enquanto o `Mock Mock-Inline 'da Mockito oferece uma maneira mais simples de zombar de classes e métodos finais.
Citações:[1] https://github.com/powermock/powermock/wiki/mockito
[2] https://davidvlijmincx.com/postss/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.powermockmaker
[8] https://davidvlijmincx.com/postss/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-ow-does-it-work-to-mock-final-methods