Mockito -matchere og Hamcrest -matchere bruges begge i Java til at oprette test påstande, men de tjener forskellige formål og har forskellige egenskaber.
Mockito -matchere
Mockito -matchere bruges primært til at oprette forventninger eller verifikationer, når man arbejder med mock -objekter. Disse matchere returnerer typen af objektet, der matches, som gør det muligt at bruge dem direkte som argumenter i metodekald på spottede objekter. F.eks. Returnerer `org.mockito.matchers.any (heltal.class)` et `heltal ', hvilket gør det velegnet til brug i metode stubbing eller verifikation, såsom` når (mockfoo.getbarbyindex (enhver (heltal.class)))' [1].
Mockito -matchere er designet til at arbejde problemfrit med Mockitos hånlige rammer, hvilket giver dig mulighed for at definere fleksible forventninger til metodeopkald til spot -objekter. De bruges dog ikke typisk med `Assert That 'udsagn, som mere almindeligt er forbundet med Hamcrest.
Hamcrest -matchere
Hamcrest -matchere er på den anden side designet til at blive brugt med `påstås at erklæringer til at hævde forhold i test. De returnerer et 'matcher' objekt, som er et predikat, der kan bruges til at evaluere, om en betingelse er opfyldt. Hamcrest -matchere er meget fleksible og kan kombineres ved hjælp af logiske operatører som 'Allof', 'Anyof' og 'ikke' for at skabe komplekse påstande [2] [3].
Hamcrest -matchere er vidt brugt i forbindelse med JUNIT og andre testrammer til at skrive klare og læsbare test påstande. De giver en flydende API, der gør testkoden mere selvdokumentering og lettere at forstå. For eksempel 'ASSIONTHAT ("Hello", Equalto ("Hej"))' Kommunikerer klart intentionen om påstanden [7].
Integration mellem Mockito og Hamcrest
I tilfælde, hvor du vil bruge en Hamcrest -matcher i en sammenhæng, der kræver en Mockito -matcher (f.eks. Stubbing eller verifikation af et metodeopkald), giver Mockito den `argthat 'metode. Denne metode giver dig mulighed for at pakke en Hamcrest -matcher og bruge den som en Mockito -matcher. For eksempel `når (mockfoo.getbarbydouble (argthat (closeto (1.0, 0.001)))) bruger en Hamcrest -matcher til at specificere en betingelse for en dobbeltværdi med en vis præcision [1] [5].
I Mockito 2 og senere håndteres integrationen med Hamcrest gennem klassen `Mockitohamcrest`, som giver en` argthat 'metode, der specifikt er designet til at arbejde med Hamcrest -matchere [5] [10]. Denne afkobling hjælper med at undgå versionskonflikter mellem Mockito og Hamcrest Libraries.
Sammenfattende bruges Mockito -matchere primært til hån og stubbing, mens Hamcrest -matchere bruges til påstande. Begge kan bruges sammen effektivt i test ved at udnytte den `argthat` metode til at integrere Hamcrest -matchere i Mockitos hånlige rammer.
Citater:[1] https://stackoverflow.com/questions/8348046/mockitos-matcher-vs-hamcrest-matcher
[2] https://www.javacodeegeeks.com/2015/11/hamcrest-matchers-tutorial.html
[3] https://www.vogella.com/tutorials/hamcrest/article.html
)
[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-test-advisor/selenium/metods/org.mockito.hamcrest.mockitohamcrest.argthat