PowerMock과 Mockito는 모두 Java로 조롱하는 데 사용되지만 다른 목적을 제공하며 특히 각각의 'Mockmaker'구현을 통해 조롱을 처리하는 방법에있어서 독특한 기능이 있습니다.
PowerMock의 모의 메이커
PowerMock은보다 강력한 기능을 제공하여 EasyMock 및 Mockito와 같은 다른 모의 라이브러리를 확장합니다. 정적 메소드, 생성자, 최종 클래스 및 방법, 개인 메소드, 정적 초기화제 제거를 조롱 할 수 있도록 사용자 정의 클래스 로더 및 바이트 코드 조작을 사용합니다 [4] [9]. PowerMock의 'Mockmaker'는 'PowerMockmaker'클래스에서 구현되며, 필요한 경우 다른 'Mockmaker'에 전화를 겁니다. 이를 통해 PowerMock은 충돌없이 다른 조롱 프레임 워크와 함께 작동 할 수 있습니다.
PowerMock의 접근 방식은보다 침습적이며 바이트 코드 조작이 고급 조롱 기능을 달성해야합니다. 이것은 정적 방법을 조롱하는 것과 같은 mockito만이 불충분 한 복잡한 시나리오에 도움이 될 수 있습니다 [9].
Mockito의 모의 제작자 인라인
Mockito의`Mock-Maker-Inline`은 최종 클래스 및 방법을 조롱 할 수있는 기능입니다. PowerMock과 같은 바이트 코드 조작이 필요하지 않고 대신 Java의 계측 API를 사용하여 런타임에 클래스를 수정합니다. 이 접근법은 덜 침습적이며 맞춤형 클래스 로더가 필요하지 않습니다 [2] [8].
`mock-maker-inline`을 활성화하려면 일반적으로`org.mockito.plugins.mockmaker`라는 파일을`src/test/resources/mockito-extensions '디렉토리에``mock-maker-inline``를 사용하여 파일을 추가하십시오. 또는 'mockito-inline'아티팩트를 사용할 수 있으며, 'mockmaker'확장 파일의 수동 구성이 필요하지 않음으로써 프로세스를 단순화 할 수 있습니다 [2] [10].
Mockito 5.0.0 이상 버전은 'Mock-Maker-Inline'을 기본 모의 메이커로 사용하므로 추가 구성없이 최종 클래스 및 메소드를 쉽게 조롱 할 수 있습니다 [3] [10].
주요 차이점
-침습성 : Bytecode 조작 및 사용자 정의 클래스 로더 사용으로 인해 PowerMock은 더 침습적이며 Mockito의 'Mock-Maker-Inline`은 Java 계측기를 사용하여 덜 침습적입니다.
- 기능 : PowerMock은 정적 메소드, 생성자 및 개인 메소드를 조롱 할 수 있습니다. Mockito는 최종 클래스 및 방법을 위해 'mockito-inline`과 같은 추가 도구 없이는 할 수 없습니다.
-구성 : PowerMock은 다른 'Mockmaker'구현에 위임하기 위해 특정 구성이 필요하지만 Mockito의 'Mock-Maker-Inline'은 간단한 구성 파일을 사용하거나 'Mockito-inline'Artifact를 사용하여 활성화 할 수 있습니다.
-기본 동작 : Mockito 5 이후에서 'Mock-Maker-Inline'은 기본값 인 반면 PowerMock은 항상 고급 기능을 사용하려면 명시적인 설정이 필요합니다.
요약하면, PowerMock과 Mockito의 'Mock-Maker-Inline'은 조롱 능력을 향상 시키지만, 접근, 침습성 및 그들이 지원하는 조롱 유형이 크게 다릅니다. PowerMock은 더 강력하지만 더 복잡한 반면 Mockito의 'Mock-Maker-Inline'은 최종 클래스와 방법을 조롱하는 더 간단한 방법을 제공합니다.
인용 :[1] https://github.com/powermock/powermock/wiki/mockito
[2] https://davidvlijmincx.com/posts/writing_higher_quality_tests_with_mockitos_inline_mock_maker/
[3] https://stackoverflow.com/questions/65986197/difference-between-mockito-core-vs-mockito-inline
[4] https://powermock.github.io
[5] https://javadoc.io/static/org.mockito/mockito-core/3.2.4/org/mockito/plugins/inlinemockmaker.html
[6] https://www.lambdatest.com/automation-testing-advisor/selenium/classes/org.mockito.plugins.mockmaker
[7] https://www.lambdatest.com/automation-testing-advisor/selenium/classes/org.powermock.api.mockito.mockmaker.powermockmaker
[8] https://davidvlijmincx.com/posts/mockito_mock_final_methods_and_classes/
[9] https://stackoverflow.com/questions/6036450/powermock-mockito-vs-mockito-alone
[10] https://stackoverflow.com/questions/53274463/what-is-mockito-inline-and-how-f-work-to-mock-final-methods