Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Mockito 경기자와 Hamcrest 매칭의 주요 차이점은 무엇입니까?


Mockito 경기자와 Hamcrest 매칭의 주요 차이점은 무엇입니까?


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