Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Quais são as principais diferenças entre Mockito Matchers e Hamcrest Matchers


Quais são as principais diferenças entre Mockito Matchers e Hamcrest Matchers


Mockito Matchers e Hamcrest Matchers são usados ​​em Java para criar afirmações de teste, mas servem a propósitos diferentes e têm características distintas.

Mockito Matchers

Mockito Matcores são usados ​​principalmente para configurar expectativas ou verificações ao trabalhar com objetos simulados. Esses fósforos retornam o tipo de objeto que está sendo correspondido, o que permite que eles sejam usados ​​diretamente como argumentos em chamadas de método em objetos simulados. Por exemplo, `org.mockito.matchers.any (Integer.class)` Retorna um `inteiro`, tornando -o adequado para uso em Method Stubbing ou Verificação, como` quando (Mockfoo.getBarbyIndex (qualquer (Integer.class)) `[1].

O Mockito Matchers foi projetado para funcionar perfeitamente com a estrutura de zombaria da Mockito, permitindo que você defina expectativas flexíveis para chamadas de métodos em objetos simulados. No entanto, eles não são normalmente usados ​​com as declarações `assertThat ', que são mais comumente associadas ao hamcrest.

Hamcrest Matchers

O Hamcrest Matchers, por outro lado, foi projetado para serem usados ​​com as declarações `AssertThat 'para afirmar condições nos testes. Eles retornam um objeto `Matcher`, que é um predicado que pode ser usado para avaliar se uma condição é atendida. Os correspondentes hamcrest são altamente flexíveis e podem ser combinados usando operadores lógicos como `alof`,` anyof` e `não 'para criar afirmações complexas [2] [3].

O Hamcrest Matchers é amplamente utilizado em conjunto com o JUNIT e outras estruturas de teste para escrever afirmações de teste claras e legíveis. Eles fornecem uma API fluente que torna o código de teste mais autodocumentador e mais fácil de entender. Por exemplo, `assertThat (" Hello ", Equalto (" Hello "))` comunica claramente a intenção da afirmação [7].

Integração entre Mockito e Hamcrest

Nos casos em que você deseja usar um Matcher Hamcrest em um contexto que requer um Mockito Matcher (por exemplo, Stubbing ou verificando uma chamada de método), o Mockito fornece o método `argthat`. Este método permite que você embrulhe um Hamcrest Matcher e use -o como um Mockito Matcher. Por exemplo, `Quando (Mockfoo.getbarbydouble (argthat (clostoto (1,0, 0,001))))` usa um lactor hamcrest para especificar uma condição para um valor duplo com alguma precisão [1] [5].

No Mockito 2 e, posteriormente, a integração com o Hamcrest é tratada pela classe 'Mockitohamcrest`, que fornece um método `argthat' projetado especificamente para trabalhar com o Hamcrest Matchers [5] [10]. Esse desacoplamento ajuda a evitar conflitos de versão entre as bibliotecas Mockito e Hamcrest.

Em resumo, os Mockito Matchers são usados ​​principalmente para zombar e malhas, enquanto o Hamcrest Matchers são usados ​​para afirmações. Ambos podem ser usados ​​juntos efetivamente nos testes, alavancando o método `argthat 'para integrar os Matcheers Hamcrest à estrutura de zombaria da Mockito.

Citações:
[1] https://stackoverflow.com/questions/8348046/mockitos-matcher-vs-hamcrest-matcher
[2] https://www.javacodegeeks.com/2015/11/hamcrest-matchers-tutorial.html
[3] https://www.vogella.com/tutorials/hamcrest/article.html
[4] https://support.intershop.com/kb/go.php/a/enfdevdoc/pages/1827636063/guide+-+7.10+migration+mockito+1+To+Mockito+2
[5] https://site.mockito.org/javadoc/current/org/mockito/hamcrest/mockitohamcrest.html
[6] https://www.baeldung.com/hamcrest-text-matchers
[7] https://automatenow.io/complete-guide-to-hamcrest-matchers/
[8] https://www.scalatest.org/scaladoc/3.0.7/org/scalatest/matchers.html
[9] https://hamcrest.org/javahamcrest/tutorial
[10] https://www.lambdatest.com/automation-testing-advisor/selenium/methods/org.mockito.hamcrest.mockitohamcrest.argthat