Mockito Matchers та Matchers Hamcrest використовуються в Java для створення тестових тверджень, але вони виконують різні цілі та мають чіткі характеристики.
Mockito Matchers
Mockito Matchers в першу чергу використовується для налаштування очікувань або перевірки під час роботи з макетними об'єктами. Ці відповідники повертають тип об'єкта, що відповідає, що дозволяє використовувати їх безпосередньо як аргументи в методах, що викликають макетні об'єкти. Наприклад, `org.mockito.matchers.Any (integer.class)` повертає `Integer ', що робить його придатним для використання в методі заглушки або перевірки, наприклад,` коли (mockfoo.getbarbyindex (будь -яке (ціле число.class))) `[1].
Mockito Matchers розроблені для безперешкодного співпраці з знущання над Макето, що дозволяє визначити гнучкі очікування щодо викликів методів на макетні об'єкти. Однак вони, як правило, не використовуються з твердженнями `assertThat`, які частіше пов'язані з hamcrest.
Matchers Hamcrest
З іншого боку, відповідні Matchers Hamcrest призначені для використання з твердженнями `assertThat` для ствердження умов у тестах. Вони повертають об'єкт `matcher`, який є предикатом, який можна використовувати для оцінки, чи дотримана умова. Матери Hamcrest є дуже гнучкими і їх можна поєднувати за допомогою логічних операторів, таких як `allof`,` anyof`, і `Not 'для створення складних тверджень [2] [3].
Матери Hamcrest широко використовуються спільно з JUNIT та іншими рамками тестування для запису чітких та читабельних тестових тверджень. Вони забезпечують вільну API, яка робить тестовий код більш самодокументуючим і простішим для розуміння. Наприклад, `AssertThat (" Привіт ", рівний (" привіт "))` чітко повідомляє про наміри твердження [7].
Інтеграція між Mockito та Hamcrest
У випадках, коли ви хочете використовувати відповідність Hamcrest у контексті, який вимагає макетного збігання (наприклад, заглушування або перевірка виклику методу), Mockito надає метод `argthat '. Цей метод дозволяє обернути відповідність Hamcrest і використовувати його як макет. Наприклад, `коли (mockfoo.getbarbydouble (argthat (closeeto (1,0, 0,001))))` використовує відповідність Hamcrest, щоб визначити умову для подвійного значення з певною точністю [1] [5].
У Mockito 2 та пізніше інтеграція з Hamcrest здійснюється через клас `moctitohamcrest`, який забезпечує метод` argthat`, спеціально розроблений для роботи з відповідними відповідями Hamcrest [5] [10]. Це роз'єднання допомагає уникнути конфліктів версій між Mockito та бібліотеками Hamcrest.
Підводячи підсумок, Mockito Matchers в основному використовується для знущання та заглушки, тоді як для тверджень використовуються відповіді Hamcrest. Обидва можна ефективно використовувати разом у тестах, використовуючи метод `argthat` для інтеграції відповідних збігів Hamcrest у знущаючу рамку Моктото.
Цитати:[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