Mockito -matchers en hamcrest -matchers worden beide in Java gebruikt voor het maken van testbeweringen, maar ze dienen verschillende doeleinden en hebben verschillende kenmerken.
Mockito matchers
Mockito -matchers worden voornamelijk gebruikt voor het opzetten van verwachtingen of verificaties bij het werken met mockobjecten. Deze matchers retourneren het type object dat wordt gematcht, waardoor ze direct kunnen worden gebruikt als argumenten in methodeaanroepen op mockobjecten. Bijvoorbeeld, `org.mockito.matchers.Amy (integer.class)` retourneert een `integer`, waardoor het geschikt is voor gebruik in methode stomp of verificatie, zoals` wanneer (mockfoo.getBarbyIndex (any (integer.class))) `[1].
Mockito Matchers zijn ontworpen om naadloos te werken met het spotraamwerk van Mockito, waardoor u flexibele verwachtingen kunt definiëren voor methodeoproepen op mockobjecten. Ze worden echter meestal niet gebruikt met 'beweren' uitspraken, die vaker worden geassocieerd met hamcrest.
Hamcrest matchers
Hamcrest -matchers, aan de andere kant, zijn ontworpen om te worden gebruikt met 'beweren' verklaringen voor het beantwoorden van voorwaarden in tests. Ze retourneren een `matcher' -object, dat een predikaat is dat kan worden gebruikt om te evalueren of aan een voorwaarde wordt voldaan. Hamcrest -matchers zijn zeer flexibel en kunnen worden gecombineerd met behulp van logische operatoren zoals `alloft`,` Anyof`, en 'niet' om complexe beweringen te creëren [2] [3].
Hamcrest -matchers worden op grote schaal gebruikt in combinatie met Junit en andere testkaders om duidelijke en leesbare testbeweringen te schrijven. Ze bieden een vloeiende API die testcode meer zelfdocumentering maakt en gemakkelijker te begrijpen. Bijvoorbeeld, `beweert (" hallo ", equyto (" hallo "))` communiceert duidelijk de bedoeling van de bewering [7].
Integratie tussen Mockito en Hamcrest
In gevallen waarin u een Hamcrest -matcher wilt gebruiken in een context die een Mockito -matcher vereist (bijv. Stubbing of het verifiëren van een methode -aanroep), biedt Mockito de methode `arghat`. Met deze methode kunt u een Hamcrest -matcher inpakken en gebruiken als een Mockito -matcher. Bijvoorbeeld, `wanneer (mockfoo.getBarbyDouble (arghat (kasto (1.0, 0.001))))` gebruikt een hamcrest -matcher om een voorwaarde te specificeren voor een dubbele waarde met enige precisie [1] [5].
In Mockito 2 en later wordt de integratie met Hamcrest afgehandeld via de klasse 'mockitohamcrest', die een 'arghat' -methode biedt die specifiek is ontworpen om te werken met hamcrest -matchers [5] [10]. Deze ontkoppeling helpt om versievolaturen tussen Mockito en Hamcrest -bibliotheken te voorkomen.
Samenvattend worden Mockito -matchers voornamelijk gebruikt voor het spotten en stoten, terwijl hambest matchers worden gebruikt voor beweringen. Beide kunnen effectief samen worden gebruikt in tests door gebruik te maken van de 'arghat' -methode om Hamcrest -matchers te integreren in het spotraamwerk van Mockito.
Citaten:[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/ 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