Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon PowerMock의 Whitebox와 Mockito의 Whitebox의 주요 차이점은 무엇입니까?


PowerMock의 Whitebox와 Mockito의 Whitebox의 주요 차이점은 무엇입니까?


PowerMock의 Whitebox와 Mockito의 Whitebox는 내부 클래스 상태에 액세스하고 조작하는 데 사용되는 유틸리티 클래스이지만, 기원, 기능 및 사용 컨텍스트에 뚜렷한 차이가 있습니다.

원산지 및 가용성

-Mockito의 Whitebox : 이것은 Mockito 내의 내부 클래스로 사용자가 내부 객체 상태를 설정할 수있었습니다. 그러나 나쁜 테스트 관행 촉진에 대한 우려와 공공 사용을위한 것이 아니기 때문에 Mockito 2.X에서 제거되었습니다 [11]. 이에 의존 한 사용자는 PowerMock의 Whitebox와 같은 대안으로 전환하거나 자체 반사 유틸리티를 구현하도록 권장되었습니다 [3].

- PowerMock의 Whitebox : 이것은 PowerMock 라이브러리의 일부이며, 다른 기능들 중에서도 개인, 정적 및 최종 방법의 조롱을 허용하여 Mockito의 기능을 확장합니다 [5]. PowerMock의 Whitebox는 테스트를위한 단순화 된 반사 유틸리티를 제공하여 개인 구성원에게 액세스하고 개인 방법의 호출을 가능하게합니다 [2] [6].

기능

-Mockito 's Whitebox (Historical) : 제거하기 전에 Mockito의 Whitebox는 사용자가'setinternalstate '와 같은 메소드를 사용하여 내부 객체 상태를 설정할 수 있도록 허용했습니다. 이것은 공개 세터가없는 수업에 모의를 주입하는 데 유용했습니다.

- PowerMock의 Whitebox : 다음을 포함하여 더 넓은 기능 세트를 제공합니다.
- 개인 회원 액세스 :`getinternalstate '와 같은 메소드는 개인 필드 값을 검색 할 수 있습니다.
- 개인 방법 호출 : 'invokemethod'방법은 정적 방법을 포함하여 개인 메소드를 호출 할 수 있습니다 [4] [10].
- 개인 필드 설정 : 명시 적으로 문서화되지는 않지만 PowerMock의 Whitebox를 사용하여 반사를 통해 개인 필드를 설정하는 데 사용될 수 있지만, 이는 주요 목적은 아닙니다.

사용 컨텍스트

-Mockito의 Whitebox : Mockito 2.X에서는 더 이상 사용할 수 없으므로 사용자는 PowerMock의 Whitebox 또는 Spring 's`reflectionTestutils'와 같은 대안을 사용하는 것이 좋습니다 [1] [3].

- PowerMock의 Whitebox : 일반적으로 개인 구성원 또는 방법에 직접 액세스 해야하는 시나리오에서 사용되거나 종종 레거시 코드 또는 쉽게 리팩게 할 수없는 복잡한 논리를 테스트 할 때. 그러나 일반적으로 캡슐화를 우회하고 취성 테스트를 이끌어 낼 수 있기 때문에 절대적으로 필요한 경우에도 이러한 유틸리티 사용을 피하는 것이 좋습니다 [10].

요약하면, 두 화이트 박스 유틸리티는 비슷한 목적으로 사용되지만 PowerMock의 버전은 더 포괄적이고 광범위하게 이용 가능하지만 Mockito의 버전은 테스트 관행에 대한 우려로 인해 제거되었습니다. PowerMock의 Whitebox는 내부 클래스 상태에 액세스하고 조작하기위한 강력한 도구이지만 신중하게 사용해야합니다.

인용 :
[1] https://stackoverflow.com/questions/40280918/what-do-i-us-instead-of--mockito-2-2-to-set-set-pields
[2] https://www.javadoc.io/doc/org.powermock/powermock-reflect/1.6.5/org/powermock/reflect/whitebox.html
[3] https://proandroiddev.com/mockito-2-x-over-powermock-migration-tips-and-tricks-top-ten-118c52ABD1D8
[4] https://johnmullins.co
[5] https://www.calsoftinc.com/blogs/unit-testing-mockito-powermockito.html
[6] https://www.javadoc.io/doc/org.powermock/powermock-reflect/latest/org/powermock/reflect/whitebox.html
[7] https://github.com/mockito/mockito/issues/422
[8] https://www.alibabacloud.com/blog/598057
[9] https://www.lambdatest.com/automation-testing-advisor/selenium/classes/org.powermock.reflect.whitebox
[10] https://github.com/powermock/powermock/wiki/bypass-encapsulation
[11] https://github.com/mockito/mockito/issues/489
[12] https://code.haleby.se/2017/02/03/a-case-fowermock/