Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Ar yra kokių nors „Hamcrest“ alternatyvų, kurios geriau veikia su „Mockito“


Ar yra kokių nors „Hamcrest“ alternatyvų, kurios geriau veikia su „Mockito“


Dirbdamas su „Mockito“, „Hamcrest“ dažnai naudojamas jo išraiškingiems atitikmenims, o tai padidina testų skaitomumą. Tačiau yra alternatyvų, kurios gali gerai veikti su „Mockito“, kiekviena turi savo stipriąsias ir silpnąsias puses.

Assertj

„Assertj“ yra populiari „Hamcrest“ alternatyva rašant tvirtinimus vienetų testuose. Tai suteikia sklandų API, kurį daugeliui kūrėjų lengviau naudoti ir išraiškingiau naudoti nei „Hamcrest“. „Assertj“ sintaksė dažnai teikiama pirmenybė jos skaitomumui ir galimybei lengvai sukurti pasirinktinius teiginius. Nors „Assertj“ nėra tiesiogiai integruotas su „Mockito“, kaip tai daro „Hamcrest“, jis gali būti naudojamas kartu su „Mockito“ tvirtinimams, todėl testai tampa labiau skaitomi ir prižiūrimi. Tačiau „Assertj“ daugiausia dėmesio skiria tvirtinimams, o ne platesnėms „Hamcrest“ galimybėms [1] [3].

Tiesa

Tiesa yra dar viena „Google“ sukurta teiginių biblioteka. Jis siūlo sklandų API, panašų į „AssertJ“, tačiau daugiau dėmesio skiriama geresnio automatinio užbaigimo palaikymui IDE teikimui, kuris gali būti naudingas norint atrasti turimus teiginius. Tiesa nėra tokia dažniausiai naudojama su „Mockito“ kaip „Hamcrest“, tačiau gali būti naudojama testų teiginiams. Kaip ir „Assertj“, tiesa labiau orientuota į tvirtinimus, o ne į bendrosios paskirties atitikimą, kurį teikia Hamcrest [3].

„Mockito“ įmontuoti „Matchers“

Pats „Mockito“ teikia atitikmenis, kurie gali būti naudojami sąveikai ir patikrinti sąveiką su modeliais objektais. Šie atitikmenys grąžina tipą, kurį jie suderina (pvz., „Bet kuris (sveikas integeris.classas)“, grąžina „sveikąjį skaičių“), kuris skiriasi nuo „Hamcrest“ rungtynių, kurie grąžina „Matcher“. Norėdami naudoti „Hamcrest Matchers“ su „Mockito“, galite naudoti „Argthat“ arba „Mockitohamcrest.Argthat“, kad „Hamcrest“ atitiktį konvertuotumėte į „Mockito“ suderinamą formą [7].

Individualizuoti diegimai

Scenarijuose, kuriuose norite nenaudoti išorinių bibliotekų, galite įdiegti savo atitikmenis ar tvirtinimus. Šis požiūris leidžia visiškai kontroliuoti elgesį ir sintaksę, tačiau reikia daugiau pastangų ir priežiūros. Paprastai nerekomenduojama, nebent turite labai specifinių poreikių, kurių patenkina esamos bibliotekos.

Išvada

Nors „Hamcrest“ yra plačiai naudojamas su „Mockito“ dėl jo lankstumo ir išraiškingumo, tokios alternatyvos kaip „Assertj“ ir „Tiesa“ gali pagerinti jūsų testų teiginį. Jei ieškote kažko, kas gerai integruotų su „Mockito“, kad atitiktų, „Hamcrest“ išlieka stiprus pasirinkimas, tačiau kartu su kitomis „Tepsertion“ bibliotekomis galite naudoti jo atitikmenis išsamesnei testavimo patirčiai. Galų gale pasirinkimas priklauso nuo jūsų specifinių poreikių ir nuostatų, susijusių su skaitomumu, naudojimo paprastumu ir tvirtinimų ar atitikmenų rūšimi, kurią jums reikia atlikti atliekant testus.

Citatos:
[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-tuitorial.html
[3] https://truth.dev/comparion.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-tutalial-part-1-unit-testing-with-junit-5-Mocko-and-hamcrest.html
[6] https://softwareEngineering.stackexchange.com/questions/447953/alternations-to-using-docko-libriary-such-Sockoto-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