Mockito 매칭업자와 Hamcrest 매칭자는 모두 Java에서 테스트 어설 션을 생성하는 데 사용되지만 다른 목적을 제공하며 뚜렷한 특성을 가지고 있습니다.
mockito 매칭
Mockito 매칭자는 주로 모의 객체로 작업 할 때 기대 또는 검증을 설정하는 데 사용됩니다. 이 매치자는 일치하는 객체의 유형을 반환하여 모의 개체에서 메소드 호출에서 인수로 직접 사용할 수 있습니다. 예를 들어,`org.mockito.matchers.any (integer.class)
integer '를 반환하여`when (mockfoo.getBarbyIndex (any (integer.class))`[1]과 같은 메소드 스터브 또는 검증에 사용하기에 적합합니다.
Mockito 매칭자는 Mockito의 조롱 프레임 워크와 완벽하게 작동하도록 설계되어 모의 개체에 대한 메소드 호출에 대한 유연한 기대치를 정의 할 수 있습니다. 그러나 일반적으로 'assert that that'진술과 함께 사용되지 않으며,이 진술은 Hamcrest와 더 일반적으로 관련되어 있습니다.
## hamcrest 매칭
반면에 Hamcrest 매칭은 테스트에서 조건을 주장하기위한 'AssertThat'문과 함께 사용되도록 설계되었습니다. 그들은 '매치 자'물체를 반환합니다.이 객체는 조건이 충족되는지 평가하는 데 사용할 수있는 술어입니다. Hamcrest 매칭자는 매우 유연하며`Allof`,`Anyof`와 같은 논리 연산자를 사용하여 결합하여 복잡한 주장을 만들 수 있습니다 [2] [3].
Hamcrest 매칭자는 Junit 및 기타 테스트 프레임 워크와 함께 널리 사용되어 명확하고 읽기 쉬운 테스트 어설 션을 작성합니다. 그들은 테스트 코드를보다 자체 문서화하고 이해하기 쉽게하는 유창한 API를 제공합니다. 예를 들어,`assert that ( "Hello", EqualTo ( "Hello"))`주장의 의도를 명확하게 전달합니다 [7].
## Mockito와 Hamcrest 간의 통합
Mockito는 Mockito 매칭 (예 : 메소드 호출을 스튜빙 또는 확인)이 필요한 컨텍스트에서 Hamcrest 매칭자를 사용하려는 경우 Mockito는 'arg that'메소드를 제공합니다. 이 메소드를 사용하면 Hamcrest 매칭자를 감싸서 Mockito 매칭으로 사용할 수 있습니다. 예를 들어,`언제 (mockfoo.getBarbyDouble (ArgThat (closeto (1.0, 0.001)))
)
````)는 hamcrest 매칭을 사용하여 일부 정밀도로 이중 값의 조건을 지정합니다 [1] [5].
Mockito 2 이후에서 Hamcrest와의 통합은 'mockitohamcrest` 클래스를 통해 처리되며,이 클래스는 Hamcrest 매칭 자와 함께 작동하도록 특별히 설계된'Argat '방법을 제공합니다 [5] [10]. 이 분리는 Mockito와 Hamcrest 라이브러리 간의 버전 충돌을 피하는 데 도움이됩니다.
요약하면, Mockito 매칭자는 주로 조롱 및 스터브에 사용되는 반면 Hamcrest 매칭은 어설 션에 사용됩니다. 둘 다 Hamcrest 매칭을 Mockito의 조롱 프레임 워크에 통합하기 위해 'Argat'방법을 활용하여 테스트에서 효과적으로 함께 사용할 수 있습니다.
인용 :[1] https://stackoverflow.com/questions/8348046/mockitos-matcher-vs-hamcrest-matcher
[2] https://www.javacodegeeks.com/2015/11/hamcrest-matchers-tutorial.html
[3] https://www.vogella.com/tutorials/hamcrest/article.html
[4] https://support.intershop.com/kb/go.php/a/enfdevdoc/pages/1827636063/guide+-+7.10+ Migration+Mockito+1++Mockito+2
[5] https://site.mockito.org/javadoc/current/org/mockito/hamcrest/mockitohamcrest.html
[6] https://www.baeldung.com/hamcrest-text-matchers
[7] https://automatenow.io/complete-guide-to-hamcrest-matchers/
[8] https://www.scalatest.org/scaladoc/3.0.7/org/scalatest/matchers.html
[9] https://hamcrest.org/javahamcrest/tutorial
[10] https://www.lambdatest.com/automation-testing-advisor/selenium/methods/org.mockito.hamcrest.mockitohamcrest.arg that that