Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Czy istnieją jakieś alternatywy dla Hamcrest, które lepiej działają z Mockito


Czy istnieją jakieś alternatywy dla Hamcrest, które lepiej działają z Mockito


Podczas pracy z Mockito Hamcrest jest często używany do swoich ekspresyjnych dopasowań, które zwiększają czytelność testów. Istnieją jednak alternatywy, które mogą dobrze działać z Mockleto, każda z własnymi mocnymi stronami i słabościami.

Assertj

AssertJ jest popularną alternatywą dla Hamcresta do pisania twierdzeń w testach jednostkowych. Zapewnia płynne interfejsy API, które wielu programistów uważa za łatwiejsze w użyciu i bardziej ekspresyjne niż Hamcrest. Składnia AssertJ jest często preferowana ze względu na jego czytelność i możliwość łatwego tworzenia niestandardowych twierdzeń. Chociaż AssertJ nie integruje się bezpośrednio z Mockito, takim jak Hamcrest, można go używać wraz z Mockito do stwierdzenia, dzięki czemu testy są bardziej czytelne i możliwe do utrzymania. Jednak AssertJ koncentruje się przede wszystkim na twierdzeniach, a nie na szerszych możliwościach dopasowania Hamcrest [1] [3].

Prawda

Prawda to kolejna biblioteka oświadczenia opracowana przez Google. Oferuje płynne interfejsy API podobne do AssertJ, ale koncentruje się bardziej na zapewnieniu lepszego wsparcia automatycznego ukończenia w IDES, co może być korzystne dla odkrycia dostępnych twierdzeń. Prawda nie jest tak powszechnie stosowana z Mockito jak Hamcrest, ale może być używana do twierdzeń w testach. Podobnie jak AssertJ, prawda bardziej koncentruje się na twierdzeniach niż na dopasowaniu ogólnego przeznaczenia, które zapewnia Hamcrest [3].

wbudowane mecze Mockito

Sam Mockito zapewnia dopasowywania, które można użyć do odcięcia i weryfikacji interakcji z próbnymi obiektami. Te dopasowawcy zwracają typ, który pasują (np. „Any (Integer.Class)„ zwraca „całość”), który różni się od mecherów Hamcrest, które zwracają „mecher”. Aby użyć mecherów Hamcresta z Mockito, możesz użyć „argthattat” lub „mocchitohamcrest.argthatt, aby przekonwertować dopasowanie Hamcrest w formę kompatybilną z Mockito [7].

Niestandardowe implementacje

W przypadku scenariuszy, w których wolisz nie korzystać z bibliotek zewnętrznych, możesz zaimplementować własne dopasowywania lub twierdzenia. Takie podejście pozwala na pełną kontrolę nad zachowaniem i składnią, ale wymaga większego wysiłku i konserwacji. Zazwyczaj nie jest to zalecane, chyba że masz bardzo specyficzne potrzeby, które nie są zaspokojone przez istniejące biblioteki.

Wniosek

Podczas gdy HAMCREST jest szeroko stosowany z Mockleto ze względu na jego elastyczność i ekspresję, alternatywy takie jak AssertJ i prawda mogą zwiększyć część twierdzeń. Jeśli szukasz czegoś, co dobrze integruje się z Mockito w celu dopasowywania, Hamcrest pozostaje silnym wyborem, ale możesz użyć jego dopasowań wraz z innymi bibliotekami Assertion, aby uzyskać bardziej kompleksowe wrażenia z testowania. Ostatecznie wybór zależy od twoich konkretnych potrzeb i preferencji dotyczących czytelności, łatwości użytkowania oraz rodzaju twierdzeń lub dopasowań, które musisz wykonać w testach.

Cytaty:
[1] https://www.reddit.com/r/java/comments/nj7dvd/who_here_are_using_the_hamcrest_api_and_why/y/
[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-deprecated-hamcrest-method-is