Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Quali sono le principali differenze tra i matcher di mockito e i matcher Hamcrest


Quali sono le principali differenze tra i matcher di mockito e i matcher Hamcrest


I matcher di mockito e i matcher Hamcrest sono entrambi utilizzati in Java per la creazione di asserzioni di test, ma servono a scopi diversi e hanno caratteristiche distinte.

matcher mockito

I matcher di mockito vengono utilizzati principalmente per impostare aspettative o verifiche quando si lavora con oggetti finti. Questi matcher restituiscono il tipo di oggetto corrispondente, il che consente loro di essere utilizzati direttamente come argomenti nel metodo chiama su oggetti finti. Ad esempio, `org.mockito.matchers.any (integer.class)` Restituisce un `intero ', rendendolo adatto per l'uso nel metodo stronzante o verifica, come` when (mockfoo.getbarbyindex (Any (integer.class)))) `[1].

I matcher di mockito sono progettati per funzionare perfettamente con il framework beffardo di Mockito, consentendo di definire aspettative flessibili per le chiamate di metodo su oggetti simulati. Tuttavia, in genere non sono usati con le dichiarazioni di "assertthatt", che sono più comunemente associate a Hamcrest.

Hamcrest Matchers

I matcher di Hamcrest, d'altra parte, sono progettati per essere utilizzati con le dichiarazioni di "Assertthatt" per l'asserzione delle condizioni nei test. Restituiscono un oggetto "matcher", che è un predicato che può essere utilizzato per valutare se viene soddisfatta una condizione. I matcher Hamcrest sono altamente flessibili e possono essere combinati utilizzando operatori logici come `allof`,` anyof` e `non 'per creare asserzioni complesse [2] [3].

I matcher Hamcrest sono ampiamente utilizzati in combinazione con Junit e altri quadri di test per scrivere asserzioni di test chiare e leggibili. Forniscono un'API fluente che rende il codice del test più auto-documentazione e più facile da capire. Ad esempio, `assertThat (" ciao ", equal (" ciao "))` comunica chiaramente l'intento dell'asserzione [7].

Super Savings on Servers!

Ad

integrazione tra mockito e hamcrest

Nei casi in cui si desidera utilizzare un matcher Hamcrest in un contesto che richiede un matcher mockito (ad esempio, stuzzicare o verificare una chiamata del metodo), Mockito fornisce il metodo `argom. Questo metodo consente di avvolgere un matcher Hamcrest e utilizzarlo come matcher mockito. Ad esempio, `quando (mockfoo.getBarbyDouble (argomthat (Closeto (1.0, 0.001))))` Usa un matcher Hamcrest per specificare una condizione per un doppio valore con una certa precisione [1] [5].

In Mockito 2 e successivamente, l'integrazione con Hamcrest viene gestita attraverso la classe `Mockitohamcrest`, che fornisce un metodo` argomentazione "specificamente progettato per funzionare con i matcher Hamcrest [5] [10]. Questo disaccoppiamento aiuta a evitare i conflitti di versione tra le biblioteche mockito e hamcrest.

In sintesi, i matcher di mockito vengono utilizzati principalmente per deridere e stuzzicare, mentre i matcher Hamcrest vengono utilizzati per le affermazioni. Entrambi possono essere usati insieme in modo efficace nei test sfruttando il metodo `argomthat` per integrare i matcher Hamcrest nel framework beffardo di Mockito.

Citazioni:
[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