Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Mockito와 더 잘 작동하는 Hamcrest에 대한 대안이 있습니까?


Mockito와 더 잘 작동하는 Hamcrest에 대한 대안이 있습니까?


Mockito와 함께 작업 할 때 Hamcrest는 종종 표현식 매칭에 사용되므로 테스트의 가독성을 향상시킵니다. 그러나 Mockito와 잘 어울릴 수있는 대안이 있으며 각각 고유 한 강점과 약점이 있습니다.

assertj

Assertj는 단위 테스트에서 주장을 작성하기위한 Hamcrest에 대한 인기있는 대안입니다. 많은 개발자들이 Hamcrest보다 사용하기 쉽고 표현력이 뛰어날 수있는 유창한 API를 제공합니다. Assertj의 구문은 종종 가독성과 사용자 지정 어설 ​​션을 쉽게 만들 수있는 능력으로 선호됩니다. Assertj는 Hamcrest와 마찬가지로 Mockito와 직접 통합되지는 않지만 Assertions에 Mockito와 함께 사용할 수 있으므로 테스트를보다 읽기 쉽고 유지 관리 할 수 ​​있습니다. 그러나 Assertj는 주로 Hamcrest의 광범위한 매칭 능력보다는 어설 션에 중점을 둡니다 [1] [3].

진실

진실은 Google에서 개발 한 또 다른 주장 라이브러리입니다. AssertJ와 유사한 유창한 API를 제공하지만 IDES에서 더 나은 자동 완성 지원을 제공하는 데 더 중점을 두어 이용 가능한 주장을 발견하는 데 유리할 수 있습니다. 진실은 Hamcrest만큼 Mockito와 함께 일반적으로 사용되지는 않지만 테스트의 주장에 사용될 수 있습니다. Assertj와 마찬가지로, 진실은 Hamcrest가 제공하는 일반적인 목적보다는 주장에 더 중점을 둡니다 [3].

Mockito의 내장 마칭터

Mockito 자체는 Mock 객체와의 상호 작용을 스터 빙 및 검증하는 데 사용할 수있는 매칭자를 제공합니다. 이 매치 업체는 일치하는 유형 (예 :

``eteger "를 반환합니다 '')를 반환합니다.이 유형은````integer '를 반환합니다') '매치 자'를 반환하는 Hamcrest 마칭 자와 다릅니다. Mockito와 함께 Hamcrest 매칭을 사용하려면`arg that '또는'mockitohamcrest.arg that '을 사용하여 Hamcrest 매칭자를 mockito 호환 형태로 변환 할 수 있습니다 [7].

사용자 정의 구현

외부 라이브러리를 사용하지 않는 시나리오의 경우 자신의 매치 자 또는 어설 션을 구현할 수 있습니다. 이 접근법은 동작 및 구문을 완전히 제어 할 수 있지만 더 많은 노력과 유지 보수가 필요합니다. 기존 라이브러리에서 충족하지 않는 매우 구체적인 요구가 없다면 일반적으로 권장되지 않습니다.

결론

Hamcrest는 유연성과 표현성으로 인해 Mockito와 널리 사용되지만 Assertj 및 Truth와 같은 대안은 테스트의 주장 부분을 향상시킬 수 있습니다. 일치하는 목적으로 Mockito와 잘 통합되는 것을 찾고 있다면 Hamcrest는 여전히 강력한 선택으로 남아 있지만보다 포괄적 인 테스트 경험을 위해 다른 Assertion Libraries와 함께 매칭을 사용할 수 있습니다. 궁극적으로 선택은 가독성, 사용 용이성, 테스트에서 수행 해야하는 어설 션 또는 일치에 관한 특정 요구와 선호도에 따라 다릅니다.

인용 :
[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-s-mockito-in-unit-testing
[7] https://stackoverflow.com/questions/8348046/mockitos-matcher-vs-hamcrest-matcher
[8] https://stackoverflow.com/questions/12606196/what-is-s- the-alternative-to-using-the-deprecated-hamcrest-method-is