O uso de Mockitohamcrest sobre os Matcores tradicionais de Hamcrest oferece várias vantagens, principalmente ao trabalhar com o Mockito para zombar em testes de unidade. Aqui estão os principais benefícios:
1. Integração com Mockito: Mockitohamcrest permite integrar perfeitamente os Matcheers Hamcrest à estrutura de zombaria da Mockito. Essa integração é crucial para a criação de stubs ou verificando chamadas de métodos com correspondência complexa de argumentos, que não é diretamente suportada apenas pelos matcheres tradicionais de hamcrest. Por exemplo, você pode usar o `Mockitohamcrest.argthat` para converter um Matcher Hamcrest em um Mockito Matcher, permitindo que você use o rico conjunto de Matchers de Hamcrest em contextos da Mockito [1] [10] [12].
2. Evitar as incompatibilidades da versão: Mockito foi dissociado do Hamcrest na versão 2.1.0 para evitar incompatibilidades de versão que causaram problemas para os usuários no passado. O Mockitohamcrest fornece uma maneira de usar os Matcores Hamcrest sem estar bem acoplado a uma versão específica do Hamcrest, reduzindo assim os possíveis conflitos [1] [10].
3. Flexibilidade na correspondência de argumentos: O Mockitohamcrest permite que você use os matcores flexíveis e expressivos do Hamcrest para definir cenários complexos de correspondência de argumentos. Isso é particularmente útil quando você precisa verificar se um método foi chamado com argumentos que correspondem a certas condições, como seqüências contendo substringas ou números específicos dentro de um determinado intervalo [4] [12].
4. Código de legibilidade e auto-documentação aprimorado: Ao usar o Hamcrest Matcheers através do MockitohamCrest, seus testes podem permanecer autocumentos e fáceis de ler. Os Matchers expressam claramente a intenção do teste, facilitando a compreensão dos desenvolvedores o que está sendo testado sem precisar de comentários adicionais [3] [9].
5. Melhores mensagens de erro: quando as afirmações falham, o Hamcrest fornece mensagens de erro detalhadas e significativas, o que pode ajudar significativamente na depuração. Isso é especialmente benéfico ao usar o MockitohamCrest, pois ajuda a identificar por que uma verificação simulada falhou, facilitando o diagnóstico de problemas [3] [9].
6. Personalização e extensibilidade: a API Matchaer da Hamcrest permite criar correspondências personalizadas adaptadas às suas necessidades de teste específicas. Quando combinado com o MockitohamCrest, essa extensibilidade permite escrever testes mais direcionados e expressivos que correspondam exatamente à lógica do seu aplicativo [6] [9].
Em resumo, o Mockitohamcrest oferece uma poderosa combinação de recursos de zombaria da Mockito com os partidores flexíveis e expressivos da Hamcrest, aumentando a legibilidade, a flexibilidade e a manutenção do teste.
Citações:[1] https://site.mockito.org/javadoc/current/org/mockito/hamcrest/mockitohamcrest.html
[2] https://stackoverflow.com/questions/20441594/mockito-and-hamcrest-tow-to-verify-invocation-of-collection-argument
[3] https://automatenow.io/complete-guide-to-hamcrest-matchers/
[4] https://www.lambdatest.com/automation-testing-advisor/selenium/methods/org.mockito.hamcrest.mockitohamcrest.mockitohamcrest
[5] https://www.javadoc.io/doc/org.mockito/mockito-core/2.2.9/org/mockito/argumentmatcher.html
[6] https://www.javacodegeeks.com/2015/11/custom-hamcrest-matchers.html
[7] https://www.lambdatest.com/automation-testing-advisor/selenium/classes/org.mockito.hamcrest.mockitohamcrest
[8] https://site.mockito.org/javadoc/current/index.html?org%2fmockito%2FargumentMatcher.html
[9] https://www.vogella.com/tutorials/hamcrest/article.html
[10] https://weblab.tudelft.nl/docs/mockito/3.10/org/mockito/hamcrest/mockitohamcrest.html
[11] https://truth.dev/comparison.html
[12] https://stackoverflow.com/questions/8348046/mockitos-matcher-vs-hamcrest-matcher