Ao trabalhar com o Mockito, o Hamcrest é frequentemente usado para seus manipuladores expressivos, o que aumenta a legibilidade dos testes. No entanto, existem alternativas que podem funcionar bem com Mockito, cada uma com seus próprios pontos fortes e fracos.
AssertJ
Assertj é uma alternativa popular ao Hamcrest para escrever asserções em testes de unidade. Ele fornece uma API fluente que muitos desenvolvedores acham mais fácil de usar e mais expressivos que o Hamcrest. A sintaxe da AssertJ é frequentemente preferida por sua legibilidade e capacidade de criar facilmente afirmações personalizadas. Embora o AssertJ não se integra diretamente ao Mockito como o Hamcrest, ele pode ser usado juntamente com o Mockito para afirmações, tornando os testes mais legíveis e sustentáveis. No entanto, o AssertJ está focado principalmente em afirmações, em vez das capacidades mais amplas de correspondência de Hamcrest [1] [3].
Verdade
A verdade é outra biblioteca de afirmação desenvolvida pelo Google. Oferece uma API fluente semelhante ao AssertJ, mas se concentra mais no fornecimento de melhor suporte de conclusão automática em IDEs, o que pode ser benéfico para descobrir as afirmações disponíveis. A verdade não é tão comumente usada com o Mockito quanto o Hamcrest, mas pode ser usado para afirmações nos testes. Como o AssertJ, a verdade é mais focada em afirmações do que na correspondência de uso geral que Hamcrest fornece [3].
Matchers embutidos da Mockito
O Mockito em si fornece a Matcuers que podem ser usados para Stubbing e Verificar interações com objetos simulados. Esses fósforos retornam o tipo que estão correspondentes (por exemplo, `qualquer (integer.class)` retorna um `integer`), que é diferente dos matcheres hamcrest que retornam um` Matcher`. Para usar o Hamcrest Matchers com o Mockito, você pode usar o `argthat` ou` Mockitohamcrest.argthat` para converter um Matcher Hamcrest em uma forma de mockito-compatível [7].
implementações personalizadas
Para cenários em que você prefere não usar bibliotecas externas, você pode implementar seus próprios correspondentes ou afirmações. Essa abordagem permite o controle completo sobre o comportamento e a sintaxe, mas requer mais esforço e manutenção. Normalmente não é recomendado, a menos que você tenha necessidades muito específicas que não são atendidas pelas bibliotecas existentes.
Conclusão
Embora o Hamcrest seja amplamente utilizado com o Mockito devido à sua flexibilidade e expressividade, alternativas como AssertJ e Truth podem melhorar a parte de afirmação de seus testes. Se você está procurando algo que se integra bem à Mockito para fins de correspondência, o Hamcrest continua sendo uma escolha forte, mas você pode usar seus fósforos ao lado de outras bibliotecas de afirmação para uma experiência de teste mais abrangente. Por fim, a escolha depende de suas necessidades e preferências específicas sobre legibilidade, facilidade de uso e tipo de afirmação ou correspondência que você precisa executar em seus testes.
Citações:[1] https://www.reddit.com/r/java/comments/nj7dvd/who_here_are_using_the_hamcrest_api_and_why/
[2] https://www.javacodegeeks.com/2015/11/hamcrest-matchers-tutorial.html
[3] https://truth.dev/comparison.html
[4] https://www.reddit.com/r/javahelp/comments/oqz8cn/unit_testing_with_mockito_framework_why_do_we/
[5] https://www.infoworld.com/article/2257253/junit-5-tutorial-part-1-unit-testing-with-junit-5-mockito e hamcrest.html
[6] https://softwareengineering.stackexchange.com/questions/447953/alternative-to-using-mock-libraries-such-as-mockito-in-unit-testing
[7] https://stackoverflow.com/questions/8348046/mockitos-matcher-vs-hamcrest-matcher
[8] https://stackoverflow.com/questions/12606196/what-is-the-alternative-to-using-the-deprecated-hamcrest-method-is