Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Які основні відмінності між Mockito Matchers та Matchers Hamcrest


Які основні відмінності між Mockito Matchers та Matchers Hamcrest


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