Працюючи з Mockito, Hamcrest часто використовується для своїх виразних відповідних відповідей, що підвищує читабельність тестів. Однак є альтернативи, які можуть добре працювати з Mockito, кожна зі своїми сильними та слабкими сторонами.
assertj
AssertJ - популярна альтернатива Hamcrest для написання тверджень у одиничних тестах. Він забезпечує вільну API, яку багато розробників вважають легше у використанні та виразніше, ніж Hamcrest. Синтаксис AssertJ часто віддається перевагу за його читабельність та здатність легко створювати власні твердження. Хоча AssertJ не безпосередньо інтегрується з макет, як це робить Hamcrest, його можна використовувати поряд з Mockito для тверджень, роблячи тести більш читабельними та реконструкційними. Однак AssertJ в першу чергу зосереджена на твердженнях, а не на більш широких можливостях відповідності Hamcrest [1] [3].
правда
Істина - це ще одна бібліотека тверджень, розроблена Google. Він пропонує вільну API, подібну до AssertJ, але більше зосереджується на забезпеченні кращої підтримки автоматичного завершення в IDE, що може бути корисним для виявлення наявних тверджень. Істина не так часто використовується з макет, як Hamcrest, але може бути використана для тверджень у тестах. Як і Assertj, правда більше орієнтована на твердження, а не на відповідність загального призначення, яке надає Hamcrest [3].
Вбудовані відповідники Mockito
Сам Mockito забезпечує збігачів, які можна використовувати для заглушення та перевірки взаємодій з макетними предметами. Ці відповідники повертають тип, який вони відповідають (наприклад, `будь -яке (integer.class)` повертає `integer`), що відрізняється від матчерів hamcrest, які повертають` matcher '. Щоб використовувати відповідність Hamcrest з Mockito, ви можете використовувати `argthat` або` moctitohamcrest.argthat`, щоб перетворити відповідність Hamcrest у форму, сумісну з макет [7].
Спеціальні реалізації
Для сценаріїв, де ви вважаєте за краще не використовувати зовнішні бібліотеки, ви можете реалізувати власні відповідники чи твердження. Цей підхід дозволяє повністю контролювати поведінку та синтаксис, але вимагає більше зусиль та обслуговування. Зазвичай це не рекомендується, якщо у вас є дуже конкретні потреби, які не задовольняють існуючі бібліотеки.
Висновок
Хоча Hamcrest широко використовується з Mockito через його гнучкість та виразність, такі альтернативи, як Assertj та Truth, можуть посилити частину тверджень ваших тестів. Якщо ви шукаєте щось, що добре інтегрується з 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-testing
[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