Mockito Matchers och Hamcrest Matchers används båda i Java för att skapa testpersoner, men de tjänar olika syften och har distinkta egenskaper.
Mockito Matchers
Mockito -matchare används främst för att ställa in förväntningar eller verifieringar när man arbetar med Mock -objekt. Dessa matchare returnerar typen av objekt som matchas, vilket gör att de kan användas direkt som argument i metodsamtal på håliga objekt. Till exempel returnerar `org.mockito.matchers.an (heltal.
Mockito Matchers är utformade för att arbeta sömlöst med Mockitos hånliga ramverk, så att du kan definiera flexibla förväntningar på metodsamtal på håliga objekt. De används emellertid inte vanligtvis med "hävdar" uttalanden, som oftare är förknippade med hamcrest.
Hamcrest Matchers
Hamcrest -matchare är å andra sidan utformade för att användas med "hävdar" uttalanden för att hävda förhållanden i tester. De returnerar ett "matcher" -objekt, som är ett predikat som kan användas för att utvärdera om ett villkor uppfylls. Hamcrest -matchare är mycket flexibla och kan kombineras med hjälp av logiska operatörer som `allof ',' Anyof 'och' inte 'för att skapa komplexa påståenden [2] [3].
Hamcrest -matchare används allmänt i samband med JUnit och andra testramar för att skriva tydliga och läsbara testpersoner. De tillhandahåller ett flytande API som gör testkoden mer självdokumentering och lättare att förstå. Till exempel, "hävdar att (" hej ", jämlika (" hej "))" kommunicerar tydligt avsikten med påståendet [7].
Integration mellan Mockito och Hamcrest
I fall där du vill använda en Hamcrest -matcher i ett sammanhang som kräver en Mockito -matcher (t.ex. stubbning eller verifiering av ett metodsamtal), tillhandahåller Mockito metoden "ArgThat". Den här metoden låter dig linda in en Hamcrest -matcher och använda den som en Mockito -matcher. Till exempel `när (mockfoo.getbarbyDouble (argThat (Closeto (1.0, 0,001)))` använder en Hamcrest -matcher för att specificera ett villkor för ett dubbelvärde med viss precision [1] [5].
I Mockito 2 och senare hanteras integrationen med Hamcrest genom klassen "Mockitohamcrest", som ger en "argthat" -metod som är specifikt utformad för att arbeta med Hamcrest -matchare [5] [10]. Denna frikoppling hjälper till att undvika versionskonflikter mellan Mockito och Hamcrest -bibliotek.
Sammanfattningsvis används mockito -matchare främst för att håna och stubba, medan Hamcrest -matchare används för påståenden. Båda kan användas tillsammans effektivt i tester genom att utnyttja metoden "ArgThat" för att integrera Hamcrest -matchare i Mockitos hånliga ramverk.
Citeringar:[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
]
[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