Pri delu z Mockito se Hamcrest pogosto uporablja za svoje ekspresivne matchers, ki povečujejo berljivost testov. Vendar pa obstajajo alternative, ki lahko dobro sodelujejo z Mockito, vsaka s svojimi močmi in slabostmi.
AssertJ
AssertJ je priljubljena alternativa Hamcrestu za pisanje trditev v enotnih testih. Omogoča tekoči API, ki ga mnogim razvijalcem zdijo lažji za uporabo in bolj izrazite kot Hamcrest. Sintaksa AssertJ je pogosto prednostna zaradi svoje berljivosti in sposobnosti enostavno ustvarjanje trditev po meri. Medtem ko se AssertJ ne integrira neposredno z Mockito, kot ga ima Hamcrest, ga je mogoče uporabiti skupaj z Mockito za trditve, s čimer je testi bolj berljiv in vzdržen. Vendar je AssertJ osredotočen predvsem na trditve in ne na širše ujemajoče se zmogljivosti Hamcrest [1] [3].
Resnica
Resnica je še ena knjižnica trditve, ki jo je razvil Google. Ponuja tekoči API, podoben AssertJ, vendar se bolj osredotoča na zagotavljanje boljše podpore za samodejno dokončanje v IDE, kar je lahko koristno za odkrivanje razpoložljivih trditev. Resnica se z Mockito ne uporablja tako pogosto kot Hamcrest, ampak jo je mogoče uporabiti za trditve v testih. Tako kot AssertJ je tudi resnica bolj osredotočena na trditve in ne na splošno ujemanje, ki ga zagotavlja Hamcrest [3].
Mockito's vgrajeni matchers
Mockito sam zagotavlja Matchers, ki jih je mogoče uporabiti za trditev in preverjanje interakcij s posmehljivimi predmeti. Ti Matcherji vrnejo vrsto, ki se ga ujemajo (npr. "Any (Integer.class)" vrne "Integer"), ki se razlikuje od Hamcrest Matchers, ki vrnejo "Matcher". Če želite uporabljati Hamcrest Matchers z Mockito, lahko uporabite `argthat` ali` mockitohamcrest.argthat` za pretvorbo hamcrest matcher v mockito-združljivo obliko [7].
Izvedbe po meri
Za scenarije, kjer raje ne uporabljate zunanjih knjižnic, lahko implementirate svoje lastne Matchers ali trditve. Ta pristop omogoča popoln nadzor nad vedenjem in skladnjo, vendar zahteva več truda in vzdrževanja. Običajno ni priporočljivo, razen če imate zelo posebne potrebe, ki jih obstoječe knjižnice ne zadovoljijo.
Sklep
Medtem ko se Hamcrest pogosto uporablja z Mockito zaradi svoje prožnosti in ekspresivnosti, lahko alternative, kot sta AssertJ in resnica, izboljšajo trditveni del vaših testov. Če iščete nekaj, kar se dobro integrira z Mockito za ujemanje, Hamcrest ostaja močna izbira, vendar lahko svoje Matchers uporabite skupaj z drugimi knjižnicami trditve za bolj celovito izkušnjo testiranja. Konec koncev je izbira odvisna od vaših posebnih potreb in preferenc glede berljivosti, enostavnosti uporabe in vrste trditev ali ujema, ki jih morate opraviti v svojih testih.
Navedbe:[1] https://www.reddit.com/r/java/comments/nj7dvd/who_here_are_using_the_hamcrest_api_and_wwy/
[2] https://www.javacodegeeks.com/2015/11/hamcrest-matchers-tutorial.html
[3] https://truth.dev/Coparison.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-uporaba-The-Depreced-hamcrest-Method-is