Mockito 5와 함께 PowerMock을 사용하고 'Mock-Maker-Inline'구성이 기술적으로 가능하지만 이러한 도구가 상호 작용하는 방식으로 인해 몇 가지 고려 사항이 포함됩니다.
PowerMock 및 Mockito 호환성
PowerMock은 정적 방법, 최종 클래스 및 생성자의 조롱을 허용하여 Mockito와 같은 조롱 프레임 워크의 기능을 확장하도록 설계되었습니다. 그러나 PowerMock과 Mockito와의 통합은 주로 이전 버전의 Mockito에 중점을 둡니다. PowerMock 버전 2.0.0 이상은 Mockito 2.X를 지원하지만 기본적으로 'Mock-Maker-Inline'을 사용하는 Mockito 5.0.0과의 호환성에 대한 문서가 제한되어 있습니다 [1] [5].
mockito 5 및`mock-maker-inline`
Mockito 5.0.0은 'Mock-Maker-Inline'을 기본 'Mockmaker'로 소개하여 최종 클래스 조롱 및 정적 메소드와 같은 기능을 사용하여 상자에서 소개합니다. 이 변경은 추가 구성 또는 종속성이 필요한 이전 버전에 비해 복잡한 클래스를 조롱하는 프로세스를 단순화합니다 [9] [10].
##`mock-maker-inline`와 함께 PowerMock 사용
Mockito 5와 함께 PowerMock을 사용하면 PowerMock의 내부 구현 및 Mockito의 'Mockmaker'와의 상호 작용으로 인해 문제가 발생할 수 있습니다. PowerMock은 자체 'Mockmaker'를 구현하여 PowerMock과 Mockito가 서로 다른 'Mockmaker'구현을 동시에 사용하려고하면 충돌을 일으킬 수 있습니다 [1] [2].
Mockito 5 및 'Mock-Maker-Inline`과 함께 PowerMock을 사용하려면 일반적으로 필요한 경우 Mockito의'Mock-Maker-Inline '에 조롱 작업을 위임하기 위해 PowerMock을 구성해야합니다. 그러나이 구성은 복잡 할 수 있으며 모든 시나리오에 대해 완전히 지원하거나 문서화되지 않을 수 있습니다.
구성 단계
1. 종속성 포함 : 프로젝트에 올바른 버전의 PowerMock 및 Mockito가 있는지 확인하십시오. PowerMock의 경우`PowerMock-Api-Mockito2` 및`PowerMock-Module-junit4`와 같은 버전을 사용하십시오. Mockito의 경우 버전 5.0.0 이상을 사용하십시오 [5] [9].
2. PowerMock 구성 : Mockito의 'Mock-Maker-Inline'과 함께 작동하도록 PowerMock을 구성해야 할 수도 있습니다. 여기에는`mock-maker-inline`을 사용할 때 PowerMock의 조롱 작업을 Mockito에 위임하기위한 구성 파일을 설정하는 것이 포함될 수 있습니다.
3. 테스트 설정 : 테스트 클래스에서`@runwith (powerMockRunner.class)`및`@repayffortest` 주석을 사용하여 PowerMock 기능을 활성화하십시오.
4. 조롱 : 대부분의 조롱 작업에 mockito를 사용하고 필요할 때 정적 메소드 조롱과 같은 특정 기능에 PowerMock을 사용하십시오.
잠재적 문제
-비 호환성 : PowerMock의 'Mockmaker'는 Mockito의 'Mock-Maker-Inline'과 충돌하여 제대로 구성되지 않으면 예측할 수없는 동작으로 이어질 수 있습니다.
- 제한된 문서 : Mockito 5와 함께 PowerMock 사용에 대한 지침이 제한되어 있으므로 다른 구성을 실험해야 할 수도 있습니다.
요약하면 Mockito 5 및 'Mock-Maker-Inline'과 함께 PowerMock을 기술적으로 사용하는 것이 가능하지만 설정은 복잡 할 수 있으며 두 프레임 워크 간의 충돌을 피하기 위해 신중한 구성이 필요할 수 있습니다. 대부분의 조롱 요구에 Mockito 5의 내장 기능을 사용하고 고유 한 기능이 필요한 특정 시나리오에 PowerMock을 예약하는 것이 좋습니다.
인용 :[1] https://github.com/powermock/powermock/wiki/mockito
[2] https://www.lambdatest.com/automation-testing-advisor/selenium/classes/org.mockito.plugins.mockmaker
[3] https://rieckpil.de/mock-java-constructors-and-their-object-creation-with-mockito/
[4] https://stackoverflow.com/questions/6036450/powermock-mockito-Vs-mockito-alone
[5] https://howtodoinjava.com/java/library/mock-testing-using-powermock-with-junit-and-mockito/
[6] https://groups.google.com/g/mockito/c/bly1pyabj94
[7] https://davidvlijmincx.com/posts/writing_higher_quality_tests_with_mockitos_inline_mock_maker/
[8] https://stackoverflow.com/questions/36536727/is-it-possible-to-us-mockito-with-kotlin-without-open-the-class/44284452
[9] https://www.infoq.com/news/2023/01/mockito-5/
[10] https://www.javacodegeeks.com/understanding-mockito-core-vs-mockitoinline.html
[11] https://powermock.github.io