Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Hamcrest'e Mockito ile daha iyi çalışan herhangi bir alternatif var mı?


Hamcrest'e Mockito ile daha iyi çalışan herhangi bir alternatif var mı?


Mockito ile çalışırken, Hamcrest genellikle testlerin okunabilirliğini artıran etkileyici eşleştiricileri için kullanılır. Bununla birlikte, her biri kendi güçlü ve zayıf yönleri olan Mockito ile iyi çalışabilen alternatifler vardır.

Assertj

AssertJ, birim testlerde iddialar yazmak için Hamcrest'e popüler bir alternatiftir. Birçok geliştiricinin Hamcrest'ten daha kolay ve daha etkileyici bulduğu akıcı bir API sağlar. AssertJ'in sözdizimi genellikle okunabilirliği ve kolayca özel iddialar oluşturma yeteneği için tercih edilir. AssertJ, Hamcrest'in yaptığı gibi Mockito ile doğrudan entegre olmasa da, Mockito ile birlikte iddialar için kullanılabilir, testleri daha okunabilir ve sürdürülebilir hale getirir. Bununla birlikte, AssertJ, Hamcrest'in daha geniş eşleşen yeteneklerinden ziyade öncelikle iddialara odaklanmıştır [1] [3].

Gerçek

Gerçek Google tarafından geliştirilen başka bir iddia kütüphanesidir. AssertJ'ye benzer akıcı bir API sunar, ancak daha çok IDE'lerde daha iyi otomatik tamamlama desteği sağlamaya odaklanır, bu da mevcut iddiaları keşfetmek için faydalı olabilir. Gerçek Mockito ile Hamcrest kadar yaygın olarak kullanılmaz, ancak testlerde iddialar için kullanılabilir. Assertj gibi, Hakikat de Hamcrest'in sağladığı genel amaçlı eşleşmeden ziyade iddialara daha fazla odaklanmıştır [3].

Mockito'nun yerleşik eşleştiricileri

Mockito'nun kendisi, sahte nesnelerle etkileşimleri engellemek ve doğrulamak için kullanılabilecek eşleştiriciler sağlar. Bu eşleştiriciler, eşleştirdikleri türü (örneğin, `(Integer.class)` `tamsayı 'döndürür), bu da bir' eşleştiriciyi döndüren Hamcrest eşleştiricilerinden farklı olarak döndürür. Mockito ile Hamcrest eşleştiricilerini kullanmak için, bir hamcrest eşleştiricisini Mockito uyumlu bir forma dönüştürmek için `argthat` veya` mockitohamcrest.argthat` kullanabilirsiniz [7].

Özel Uygulamalar

Harici kütüphaneler kullanmamayı tercih ettiğiniz senaryolar için kendi eşleştiricilerinizi veya iddialarınızı uygulayabilirsiniz. Bu yaklaşım, davranış ve sözdizimi üzerinde tam kontrol sağlar, ancak daha fazla çaba ve bakım gerektirir. Mevcut kütüphaneler tarafından karşılanmayan çok özel ihtiyaçlarınız yoksa genellikle önerilmez.

Çözüm

Hamcrest, esnekliği ve ifadesi nedeniyle Mockito ile yaygın olarak kullanılırken, AssertJ ve Truth gibi alternatifler testlerinizin iddia kısmını artırabilir. Mockito ile eşleşen amaçlar için iyi bir şekilde entegre olan bir şey arıyorsanız, Hamcrest güçlü bir seçim olmaya devam ediyor, ancak eşleştiricilerini daha kapsamlı bir test deneyimi için diğer iddia kütüphanelerinin yanında kullanabilirsiniz. Nihayetinde, seçim okunabilirlik, kullanım kolaylığı ve testlerinizde gerçekleştirmeniz gereken iddia veya eşleşmelerle ilgili özel ihtiyaçlarınıza ve tercihlerinize bağlıdır.

Alıntılar:
[1] https://www.reddit.com/r/java/comments/nj7dvd/who_here_are_using_the_hamcrest_api_and_why/
[2] https://www.javacodeeks.com/2015/11/hamcrest-catchers-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 ve-hamcrest.html
[6] https://softwareengineering.stackexchange.com/questions/447953/alternatives-to-susing-mock-librarlar-such-as-mockito-in-unit-test-test
[7] https://stackoverflow.com/questions/8348046/mockitos-matcher-vs-hamcrest-catcher
[8] https://stackoverflow.com/questions/12606196/what-is-the-alternativation-to-the-teprecated-hamcrest-Method- IS