Les Mockito Matchers et Hamcrest sont tous deux utilisés en Java pour créer des affirmations de test, mais ils servent des objectifs différents et ont des caractéristiques distinctes.
Mockito Matchers
Les correspondances de Mockito sont principalement utilisées pour configurer des attentes ou des vérifications lorsque vous travaillez avec des objets simulés. Ces correspondances renvoient le type d'objet correspondant, ce qui leur permet d'être utilisé directement comme arguments dans les appels de méthode sur des objets simulés. Par exemple, `org.mockito.matchers.any (Integer.class)` Renvoie un `Integer», ce qui le rend adapté à une utilisation dans la méthode Stubbing ou Vérification, tel que `quand (mockfoo.getBarByIndex (any (enter.class))))` [1].
Les matchs de Mockito sont conçus pour fonctionner de manière transparente avec le cadre moqueur de Mockito, vous permettant de définir des attentes flexibles pour les appels de méthode sur des objets simulés. Cependant, ils ne sont généralement pas utilisés avec des instructions «AssertThat», qui sont plus souvent associées à Hamcrest.
Matchers Hamcrest
Les matchs Hamcrest, en revanche, sont conçus pour être utilisés avec des instructions «AssertThat» pour affirmer les conditions des tests. Ils renvoient un objet «Matcher», qui est un prédicat qui peut être utilisé pour évaluer si une condition est remplie. Les matchs Hamcrest sont très flexibles et peuvent être combinés à l'aide d'opérateurs logiques comme `allof ',« anyof »et« non »pour créer des affirmations complexes [2] [3].
Les matchs Hamcrest sont largement utilisés en conjonction avec JUnit et d'autres cadres de test pour écrire des affirmations de test claires et lisibles. Ils fournissent une API couramment qui rend le code de test plus auto-documenté et plus facile à comprendre. Par exemple, `AssertThat (" Hello ", EqualTo (" Hello "))` Communique clairement l'intention de l'affirmation [7].
Intégration entre Mockito et Hamcrest
Dans les cas où vous souhaitez utiliser un correspondant Hamcrest dans un contexte qui nécessite un Mockito Matcher (par exemple, Stubbing ou Vérification d'un appel de méthode), Mockito fournit la méthode `Argthat». Cette méthode vous permet d'envelopper un correspondant Hamcrest et de l'utiliser comme Mockito Matcher. Par exemple, `quand (mockfoo.getBarbyDouble (argthat (roserto (1,0, 0,001))))` utilise un correspondant Hamcrest pour spécifier une condition pour une double valeur avec une certaine précision [1] [5].
Dans Mockito 2 et plus tard, l'intégration avec Hamcrest est gérée via la classe `Mockitohamcrest ', qui fournit une méthode« Argthat »spécialement conçue pour fonctionner avec Hamcrest [5] [10]. Ce découplage aide à éviter les conflits de version entre les bibliothèques Mockito et Hamcrest.
En résumé, les Mockito Matchers sont principalement utilisés pour la moquerie et le coup, tandis que les matchs Hamcrest sont utilisés pour les affirmations. Les deux peuvent être utilisés ensemble efficacement dans les tests en tirant parti de la méthode «Argthat» pour intégrer Hamcrest Matchers dans le cadre moqueur de Mockito.
Citations:[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/compte-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-tetsting-advisor/selenium/methods/org.mockito.hamcrest.mockitohamcrest.argthat