Při práci s Mockito se Hamcrest často používá pro své expresivní zápasky, což zvyšuje čitelnost testů. Existují však alternativy, které mohou dobře fungovat s Mockito, z nichž každá má vlastní silné a slabé stránky.
Assertj
Assertj je populární alternativou k Hamcrestu pro psaní tvrzení v jednotkových testech. Poskytuje plynulé API, které mnoho vývojářů považuje za snazší a expresivnější než Hamcrest. Assertjova syntaxe je často preferována pro její čitelnost a schopnost snadno vytvářet vlastní tvrzení. I když se AssertJ přímo neintegruje s Mockito jako Hamcrest, lze jej použít spolu s Mockito pro tvrzení, což způsobuje, že testy činí čitelnější a udržovatelné. Assertj je však primárně zaměřen spíše na tvrzení než na širší schopnosti porovnávání Hamcrestu [1] [3].
Pravda
Pravda je další knihovna tvrzení vyvinutá společností Google. Nabízí plynulé API podobné ASSERTJ, ale více se zaměřuje na poskytování lepší podpory automatického dokončení v IDE, což může být prospěšné pro objevování dostupných tvrzení. Pravda se s Mockito nepoužívá tak běžně jako Hamcrest, ale může být použita pro tvrzení v testech. Stejně jako Assertj je pravda více zaměřena spíše na tvrzení než na generální účel, které Hamcrest poskytuje [3].
Mockito's Vestavěné porovnávače
Samotný Mockito poskytuje porovnávače, které lze použít pro strnivování a ověřování interakcí s falešnými objekty. Tito zápasů vrací typ, který odpovídají (např. „Any (Integer.class)` Vrací „Integer“), který se liší od Hamcrest Matchers, které vrací „porovnávač“. Chcete-li použít Hamcrest Matchers s Mockito, můžete použít `argThat` nebo` mockitohamcrest.argthat` k přeměně Hamcrest Matcher na mockito kompatibilní podobu [7].
Vlastní implementace
Pro scénáře, ve kterých raději nepoužíváte externí knihovny, můžete implementovat své vlastní porovnávače nebo tvrzení. Tento přístup umožňuje úplnou kontrolu nad chováním a syntaxí, ale vyžaduje větší úsilí a údržbu. Obvykle se to nedoporučuje, pokud nemáte velmi specifické potřeby, které existující knihovny nesplní.
Závěr
Zatímco Hamcrest je široce používán s Mockito kvůli jeho flexibilitě a expresivitě, alternativy jako Assertj a Truth mohou zvýšit prosazování vašich testů. Pokud hledáte něco, co se dobře integruje s Mockito pro účely porovnávání, zůstává Hamcrest silnou volbou, ale pro komplexnější zkušenosti s testováním můžete použít jeho porovnávače spolu s dalšími knihovnami tvrzení. Nakonec volba závisí na vašich konkrétních potřebách a preferencích týkajících se čitelnosti, snadného použití a typu tvrzení nebo zápasů, které musíte provést v testech.
Citace:[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-Sas-As-As-Mockito-in-ninit-test
[7] https://stackoverflow.com/questions/8348046/mockitos-macher-vs-hamcrest-matcher
[8] https://stackoverflow.com/questions/12606196/what-is-the-alternative-to-using-the-deprecated-hamcrest-metod-is