Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Mockito와 함께 PowerMock을 사용할 때 일반적인 문제는 무엇입니까?


Mockito와 함께 PowerMock을 사용할 때 일반적인 문제는 무엇입니까?


Mockito와 함께 PowerMock을 사용할 때 통합 복잡성으로 인해 몇 가지 일반적인 문제가 발생할 수 있습니다. 다음은 이러한 문제에 대한 자세한 설명입니다.

양립 할 수없는 버전

주요 과제 중 하나는 Mockito와 PowerMock의 버전이 호환되도록하는 것입니다. 예를 들어, PowerMock 버전 1.7.0 RC2는 Mockito 버전 2.1.0 [1] [4]와 호환됩니다. 호환되지 않는 버전을 사용하면`java.lang.noclassdeffounderror` 또는`java.lang.classnotfoundexception`과 같은 오류가 발생할 수 있습니다 [1] [4].

mockito API 확장

PowerMock은 Mockito 2.X와 올바르게 작동하기 위해 올바른 Mockito API 확장이 필요합니다. 'PowerMock-Api-Mockito'확장은 Mockito 2.X에서 작동하지 않으며`java.lang.noclassdeffounderRor : org/mockito/cglib/proxy/methodinterceptor '와 같은 예외를 일으킬 것입니다. 대신, 이러한 문제를 피하려면 'PowerMock-Api-Mockito2'를 사용해야합니다 [1] [4].

화이트 박스 제거

Mockito 2.x에는 더 이상 객체의 내부 상태를 설정하는 데 사용 된 화이트 박스 기능이 포함되어 있지 않습니다. PowerMock은 자체 화이트 박스를 제공하지만이를 사용하면`org.powermock.reflect.exceptions.fieldNotFoundException`와 같은 문제가 발생할 수 있습니다. PowerMock의 Whitebox가 귀하에게 적합하지 않은 경우 자신의 구현을 작성하는 것을 고려하십시오 [1] [4].

Mockmaker 구성

PowerMock은 ClassPath에 모두 존재한다면 Mockito의 'Mock-Maker-Inline'과 충돌 할 수있는 자체 'Mockmaker'를 구현합니다. 이를 해결하려면 구성 파일 [3]에서`mockito.mock-maker-class = mock-maker-inline`를 설정하여 Mockito의 'mockmaker'를 위임하기 위해 PowerMock을 구성 할 수 있습니다.

예외 처리

Mockito 2.X와 함께 PowerMock을 사용하는 경우 원래 테스트 예외는`runtimeexceptionProxy '로 래핑됩니다. 이를 위해서는`@test (예상 = somexception.class)`to` @test (예상 = Exception.class)에서 테스트 주석을 수정해야합니다 [4].

다른 프레임 워크와 통합

PowerMock은 바이트 코드 조작 기술로 인해 스프링 또는 특정 Java 버전과 같은 다른 프레임 워크 또는 라이브러리와 충돌 할 수 있습니다 [9]. 이로 인해 테스트 실행 속도가 느리고 종속성 관리에서 추가 복잡성이 이어질 수 있습니다 [9].

복잡성과 성능

PowerMock의 고급 기능은 바이트 코드 조작으로 인해 복잡성이 높아지고 테스트 실행이 느려집니다. 이로 인해 Mockito 단독 사용과 비교하여 테스트를 설정하고 유지하기가 더 어려워 질 수 있습니다 [9].

전반적으로 PowerMock은 특히 레거시 코드 또는 복잡한 정적 방법의 경우 강력한 조롱 기능을 제공하지만 Mockito 및 기타 프레임 워크와의 통합 문제를 피하기 위해 신중한 설정 및 관리가 필요합니다.

인용 :
[1] https://dzone.com/articles/mockito-2x-over-powermock-migration-top-tips-and-tricks
[2] https://stackoverflow.com/questions/43669909/powermock-fails-tests
[3] https://github.com/powermock/powermock/wiki/mockito
[4] https://proandroiddev.com/mockito-2-x-over-powermock-migration-tips-and-tricks-top-ten-118c52abd1d8
[5] https://github.com/powermock/powermock/issues/811
[6] https://stackoverflow.com/questions/6036450/powermock-mockito-vs-mockito-alone
[7] https://github.com/mockk/mockk/issues/79
[8] https://objectcomputing.com/resources/publications/sett/september-2010-mockito-Integration-made-easier
[9] https://www.javacodegeeks.com/2024/12/mockito-vs-powermock whith whith--one-to--choose-for-mocking-cethods.html