Când lucrați cu Mockito, Hamcrest este adesea folosit pentru potrivirile sale expresive, care îmbunătățesc lizibilitatea testelor. Cu toate acestea, există alternative care pot funcționa bine cu Mockito, fiecare cu propriile puncte forte și puncte slabe.
ASSERTJ
Assertj este o alternativă populară la Hamcrest pentru scrierea afirmațiilor în testele unitare. Oferă o API fluentă pe care mulți dezvoltatori le consideră mai ușor de utilizat și mai expresive decât Hamcrest. Sintaxa Assertj este adesea preferată pentru lizibilitatea sa și capacitatea de a crea cu ușurință afirmații personalizate. În timp ce Assertj nu se integrează direct cu Mockito așa cum face Hamcrest, acesta poate fi utilizat alături de Mockito pentru afirmații, făcând testele mai lizibile și mai întreținute. Cu toate acestea, Assertj este concentrat în primul rând pe afirmații, mai degrabă decât pe capacitățile de potrivire mai largi ale lui Hamcrest [1] [3].
Adevărul
Adevărul este o altă bibliotecă de afirmație dezvoltată de Google. Oferă o API fluentă similară cu Assertj, dar se concentrează mai mult pe furnizarea de un suport de completare auto mai bună în IDES, ceea ce poate fi benefic pentru descoperirea afirmațiilor disponibile. Adevărul nu este la fel de frecvent utilizat cu Mockito ca Hamcrest, dar poate fi utilizat pentru afirmații în teste. La fel ca assertj, adevărul este mai concentrat pe afirmații, mai degrabă decât pe potrivirea cu scop general pe care Hamcrest o oferă [3].
Mockit-ul Mock-In-Matchers
Mockito în sine oferă potriviri care pot fi utilizate pentru chestiuni și verificarea interacțiunilor cu obiecte batjocoritoare. Aceste matchers returnează tipul pe care îl potrivesc (de exemplu, „orice (Integer.Class)` returnează un `Integer`), care este diferit de Hamcrest Matchers care returnează un„ matcher ”. Pentru a utiliza Hamcrest Matchers cu Mockito, puteți utiliza `Argthat` sau` Mockitohamcrest.Argthat` pentru a transforma un Matcher Hamcrest într-o formă compatibilă Mockito [7].
Implementări personalizate
Pentru scenarii în care preferați să nu utilizați biblioteci externe, puteți implementa propriile potriviri sau afirmații. Această abordare permite un control complet asupra comportamentului și sintaxei, dar necesită mai mult efort și întreținere. De obicei, nu este recomandat decât dacă aveți nevoi foarte specifice, care nu sunt satisfăcute de bibliotecile existente.
Concluzie
În timp ce Hamcrest este utilizat pe scară largă cu Mockito datorită flexibilității și expresivității sale, alternative precum Assertj și Truth pot spori partea de afirmație a testelor tale. Dacă sunteți în căutarea a ceva care se integrează bine cu Mockito în scopuri potrivite, Hamcrest rămâne o alegere puternică, dar puteți folosi meciurile sale alături de alte biblioteci de afirmație pentru o experiență de testare mai cuprinzătoare. În cele din urmă, alegerea depinde de nevoile și preferințele dvs. specifice cu privire la lizibilitate, ușurința de utilizare și de tipul de afirmații sau potriviri pe care trebuie să le efectuați în testele dvs.
Citări:[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-deprecat-hamcrest-method-is