Mockito Matchers og Hamcrest Matchers brukes begge i Java for å lage testpåstander, men de tjener forskjellige formål og har forskjellige egenskaper.
Mockito Matchers
Mockito -matchere brukes først og fremst til å sette opp forventninger eller verifikasjoner når du jobber med hånlige objekter. Disse matcherne returnerer typen av objektet som blir matchet, noe som gjør at de kan brukes direkte som argumenter i metodeanrop på hånlige objekter. For eksempel `org.mockito.matchers.any (heltall.class)` returnerer et `heltall`, noe som gjør det egnet for bruk i metodestubbing eller verifisering, for eksempel` når (mockfoo.getBarbyIndex (hvilken som helst (heltall.class))) `[1].
Mockito -matchere er designet for å fungere sømløst med Mockitos hånlige rammeverk, slik at du kan definere fleksible forventninger til metodesamtaler på hånlige objekter. Imidlertid brukes de ikke vanligvis med "påstander om uttalelser, som er oftere assosiert med Hamcrest.
Hamcrest Matchers
Hamcrest -matchere er derimot designet for å brukes med `hevder som uttalelser for å hevde forhold i tester. De returnerer et `Matcher` -objekt, som er et predikat som kan brukes til å evaluere om en tilstand er oppfylt. Hamcrest -matchere er svært fleksible og kan kombineres ved hjelp av logiske operatører som `allof`,` anyof` og `ikke 'for å lage komplekse påstander [2] [3].
Hamcrest -matchere er mye brukt i forbindelse med Junit og andre testrammer for å skrive klare og lesbare testpåstander. De gir et flytende API som gjør testkoden mer selvdokumenterende og lettere å forstå. For eksempel, `hevder det (" hei ", likesto (" hei "))" kommuniserer tydelig intensjonen om påstanden [7].
Integrering mellom Mockito og Hamcrest
I tilfeller der du vil bruke en Hamcrest -matcher i en sammenheng som krever en Mockito -matcher (f.eks. Stubbing eller verifisering av en metodeanrop), gir Mockito `ArgThat` -metoden. Denne metoden lar deg pakke en Hamcrest -matcher og bruke den som en Mockito -matcher. For eksempel `når (mockfoo.getBarbyDouble (ArgThat (Closeto (1.0, 0.001)))) bruker en Hamcrest -matcher for å spesifisere en betingelse for en dobbel verdi med en viss presisjon [1] [5].
I Mockito 2 og senere blir integrasjonen med Hamcrest håndtert gjennom `MockitohamCrest` -klassen, som gir en` ArgThThat` -metode som er spesielt designet for å jobbe med Hamcrest Matchers [5] [10]. Denne avkoblingen hjelper til med å unngå versjonskonflikter mellom Mockito og Hamcrest -bibliotekene.
Oppsummert brukes Mockito -matchere først og fremst til hån og stubbing, mens Hamcrest -matchere brukes til påstander. Begge kan brukes sammen effektivt i tester ved å utnytte `ArgThat` -metoden for å integrere Hamcrest Matchers i Mockitos hånlige ramme.
Sitasjoner:[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.inshop.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-txt-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