Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Ali obstajajo druge možnosti za Hamcrest, ki bolje delujejo z Mockito


Ali obstajajo druge možnosti za Hamcrest, ki bolje delujejo z Mockito


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