Маттеры Mockito и Matchers Hamcrest используются в Java для создания тестовых утверждений, но они служат разным целям и имеют различные характеристики.
Mockito Matchers
Маттеры Mockito в основном используются для настройки ожиданий или проверки при работе с фиктивными объектами. Эти совпадения возвращают тип подходящего объекта, который позволяет им непосредственно использовать в качестве аргументов в методах вызовов на максимальные объекты. Например, `org.mockito.matchers.any (integer.class)` возвращает `integer`, что делает его подходящим для использования в методе загрязнения или проверки, например,` when (mockfoo.getbarbyindex (любой (integer.class))) `[1].
Маттеры Mockito предназначены для беспрепятственной работы с смешной структурой Mockito, что позволяет определить гибкие ожидания для вызовов методов на фиктивных объектах. Тем не менее, они обычно не используются с операторами «AssertThat», которые чаще связаны с Hamcrest.
Hamcrest Matchers
Маттерс -маттерс, с другой стороны, предназначены для использования с операторами «AssertThat» для утверждения условий в тестах. Они возвращают объект «совпадения», который является предикатом, который можно использовать для оценки того, выполнено ли условие. Маттеры Hamcrest очень гибки и могут быть объединены с использованием логических операторов, таких как `allof`,` anyof` и «не», чтобы создать сложные утверждения [2] [3].
Маттеры Hamcrest широко используются в сочетании с Junit и другими фреймводами тестирования для написания четких и читаемых тестовых утверждений. Они предоставляют беглый API, который делает тестовый код более самостоятельным и проще для понимания. Например, `assertthat (" hello ", evalto (" hello "))` явно передает намерение утверждения [7].
интеграция между Mockito и Hamcrest
В тех случаях, когда вы хотите использовать сопоставщик Hamcrest в контексте, который требует сопоставления Mockito (например, запор или проверка метода вызова), Mockito предоставляет метод «argthat». Этот метод позволяет вам обернуть сочетание Hamcrest и использовать его в качестве сопоставления Mockito. Например, `when (mockfoo.getbarbydouble (argthat (chloeTo (1,0, 0,001))))` использует сопоставитель Hamcrest, чтобы указать условие для двойного значения с некоторой точностью [1] [5].
В Mockito 2 и позже интеграция с Hamcrest обрабатывается через класс «Mockitohamcrest», который предоставляет метод «argthat», специально предназначенный для работы с маттерами Hamcrest [5] [10]. Эта развязка помогает избежать конфликтов версий между библиотеками Mockito и Hamcrest.
Таким образом, матчеры Mockito в основном используются для насмешек и загрязнения, в то время как матчеры Hamcrest используются для утверждений. Оба могут эффективно использовать вместе в тестах, используя метод «argthat» для интеграции маттера Hamcrest в смешную структуру Mockito.
Цитаты:[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