Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Есть ли альтернативы Hamcrest, которые лучше работают с Mockito


Есть ли альтернативы Hamcrest, которые лучше работают с Mockito


При работе с Mockito, Hamcrest часто используется для своих выразительных маттера, что улучшает читаемость тестов. Тем не менее, есть альтернативы, которые могут хорошо работать с Mockito, каждый со своими сильными и слабыми сторонами.

assertj

AssertJ является популярной альтернативой Hamcrest для написания утверждений в модульных тестах. Он обеспечивает беглую API, который многие разработчики считают проще в использовании и более выразительными, чем Hamcrest. Синтаксис AssertJ часто предпочтительнее его читаемости и возможности легко создавать пользовательские утверждения. Хотя AssertJ не интегрируется с Mockito, как это делает Hamcrest, его можно использовать вместе с Mockito для утверждений, делая тесты более читаемыми и поддерживаемыми. Тем не менее, AssertJ в первую очередь сосредоточена на утверждениях, а не на более широких возможностях сопоставления Хамреста [1] [3].

Правда

Правда - это еще одна библиотека утверждений, разработанная Google. Он предлагает беглый API, аналогичный ASSERTJ, но больше фокусируется на обеспечении лучшей поддержки автоматического завершения в IDE, что может быть полезно для обнаружения доступных утверждений. Истина не так часто используется с Mockito, как Hamcrest, но может использоваться для утверждений в тестах. Как и ASSERTJ, истина больше сосредоточена на утверждениях, а не на соответствии с общим назначением, которое предоставляет Hamcrest [3].

Mockito's встроенные матчи

Сам Mockito предоставляет совпадения, которые можно использовать для загрязнения и проверки взаимодействий с макетными объектами. Эти совпадения возвращают тип, который они соответствуют (например, `any (integer.class)` возвращает `integer '), который отличается от матцеров Hamcrest, которые возвращают` matchter'. Чтобы использовать матчеры Hamcrest с Mockito, вы можете использовать `argthat` или` mockitohamcrest.argthat`, чтобы преобразовать маттер Hamcrest в форму-совместимую форму [7].

Пользовательские реализации

Для сценариев, в которых вы предпочитаете не использовать внешние библиотеки, вы можете реализовать свои собственные совпадения или утверждения. Этот подход позволяет полный контроль над поведением и синтаксисом, но требует больше усилий и обслуживания. Обычно это не рекомендуется, если у вас нет очень конкретных потребностей, которые не удовлетворяют существующие библиотеки.

Заключение

В то время как Hamcrest широко используется с Mockito из -за его гибкости и выразительности, альтернативы, такие как Assertj и истина, могут улучшить утверждение части ваших тестов. Если вы ищете что -то, что хорошо интегрируется с Mockito для соответствия целям, Hamcrest остается сильным выбором, но вы можете использовать его матчи наряду с другими библиотеками утверждений для более полного опыта тестирования. В конечном счете, выбор зависит от ваших конкретных потребностей и предпочтений в отношении читаемости, простоты использования и типа утверждений или совпадений, которые вам необходимо выполнить в ваших тестах.

Цитаты:
[1] https://www.reddit.com/r/java/comments/nj7dvd/who_here_are_using_the_hamcrest_api_and_why/
[2] https://www.javacodegeeks.com/2015/11/hamcrest-matchers-tutorial.html
[3] https://truth.dev/comparison.html
[4] https://www.reddit.com/r/javahelp/comments/oqz8cn/unit_testing_with_mockito_framework_why_do_we/
[5] https://www.infoworld.com/article/2257253/junit-5-tutorial-part-1-unit-testing-with-junit-5-mockito-and-hamcrest.html
[6] https://softwareengineering.stackexchange.com/questions/447953/alternatives-to-using-mock-libraries-such-as-mockito-in-unit-тестирование
[7] https://stackoverflow.com/questions/8348046/mockitos-matcher-vs-hamcrest-matcher
[8] https://stackoverflow.com/questions/12606196/what-is-the-alternative-to-using-the-deprecated-hamcrest-method-is