L'uso di Mockitohamcrest sui tradizionali matcher di Hamcrest offre diversi vantaggi, in particolare quando si lavora con Mockito per deridere i test unitari. Ecco i vantaggi chiave:
1. Integrazione con Mockito: Mockitohamcrest ti consente di integrare perfettamente i matcher Hamcrest con il framework beffardo di Mockito. Questa integrazione è cruciale per la creazione di stub o la verifica delle chiamate di metodo con una complessa corrispondenza di argomenti, che non è direttamente supportata dai soli tradizionali matcher di Hamcrest. Ad esempio, puoi usare `mockitohamcrest.argthat` per convertire un matcher Hamcrest in un matcher di mockito, consentendoti di utilizzare il ricco set di matcher di Hamcrest in contesti di mockito [1] [10] [12].
2. Evitamento delle incompatibilità della versione: Mockito è stato disaccoppiato da Hamcrest nella versione 2.1.0 per evitare le incompatibilità della versione che avevano causato problemi agli utenti in passato. Mockitohamcrest fornisce un modo per utilizzare i matcher Hamcrest senza essere strettamente accoppiati a una versione specifica di Hamcrest, riducendo così potenziali conflitti [1] [10].
3. Flessibilità nell'argomento Matching: Mockitohamcrest ti consente di utilizzare i matcher flessibili ed espressivi di Hamcrest per definire scenari di corrispondenza di argomenti complessi. Ciò è particolarmente utile quando è necessario verificare che un metodo sia stato chiamato con argomenti che corrispondono a determinate condizioni, come stringhe contenenti sottostringhe o numeri specifici all'interno di un determinato intervallo [4] [12].
4. Miglioramento della leggibilità e codice auto-documentazione: utilizzando i matcher Hamcrest tramite Mockitohamcrest, i test possono rimanere auto-documentazione e facili da leggere. I matcher esprimono chiaramente l'intento del test, rendendo più facile per gli sviluppatori capire cosa viene testato senza aver bisogno di ulteriori commenti [3] [9].
5. Messaggi di errore migliori: quando le asserzioni falliscono, Hamcrest fornisce messaggi di errore dettagliati e significativi, che possono aiutare in modo significativo al debug. Ciò è particolarmente vantaggioso quando si utilizza Mockitohamcrest, in quanto aiuta a identificare il motivo per cui una verifica finta non è riuscita, rendendo più facile la diagnosi di problemi [3] [9].
6. Personalizzazione ed estensibilità: l'API del matcher di Hamcrest ti consente di creare matcher personalizzati su misura per le tue esigenze di test specifiche. Se combinata con Mockitohamcrest, questa estensibilità ti consente di scrivere test più mirati ed espressivi che corrispondono con precisione alla logica della tua applicazione [6] [9].
In sintesi, Mockitohamcrest offre una potente combinazione delle capacità di beffardo di Mockito con i matcher flessibili ed espressivi di Hamcrest, migliorando la leggibilità dei test, la flessibilità e la manutenibilità.
Citazioni:[1] https://site.mockito.org/javadoc/current/org/mockito/hamcrest/mockitohamcrest.html
[2] https://stackoverflow.com/questions/20441594/mockito-and-hamcrest-how-to-verify-invocation-of-conlection-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