Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Каковы основные различия между белым ящиком PowerMock и Whitebox Mockito


Каковы основные различия между белым ящиком PowerMock и Whitebox Mockito


Белый ящик PowerMock и Whitebox Mockito - это утилит, используемые для доступа и манипулирования внутренними состояниями классов, но они имеют четкие различия в их происхождении, функциональных возможностях и контекстах использования.

происхождение и доступность

- Whitebox Mockito: Это был внутренний класс в Mockito, который позволил пользователям устанавливать внутренние состояния объектов. Тем не менее, он был удален из Mockito 2.x из -за опасений по поводу содействия плохим методам тестирования и потому, что он не был предназначен для общественного использования [11]. Пользователям, которые полагались на это, было рекомендовано перейти на такие альтернативы, как Whitebox PowerMock или реализовать свои собственные утилиты для отражения [3].

- Whitebox PowerMock: это часть библиотеки PowerMock, которая расширяет возможности Mockito, позволяя насмехаться над частными, статическими и окончательными методами, среди других функций [5]. Белый ящик PowerMock предоставляет упрощенную утилиту отражения, предназначенную для тестов, обеспечивая доступ к частным членам и вызов частных методов [2] [6].

функциональность

- Белый ящик Mockito (исторический): перед его удалением белый ящик Mockito позволил пользователям устанавливать внутренние состояния объектов, используя такие методы, как `setInternalstate`. Это было полезно для инъекции макетов в классы без публичных сеттеров.

- Whitebox's PowerMock: предлагает более широкий набор функций, в том числе:
- Доступ к частным членам: такие методы, как `getInternalState`, позволяют извлечь личные значения поля.
- Вызывая частные методы: метод `vongekemethod 'может вызывать частные методы, включая статические [4] [10].
- Установка частных полей: хотя и не задокументировано, белый ящик PowerMock может использоваться для установки частных полей посредством размышлений, хотя это не является его основной целью.

Контекст использования

- Whitebox's Mockito: поскольку он больше не доступен в Mockito 2.x, пользователям рекомендуется использовать альтернативы, такие как Whitebox PowerMock или Spring `ReflectionTestutils ', если это применимо [1] [3].

- Белый ящик PowerMock: обычно используется в сценариях, где необходим прямой доступ к частным членам или методам, часто в устаревшем коде или при тестировании сложной логики, которую нельзя легко реформировать. Тем не менее, обычно рекомендуется избегать использования таких утилит, если они не являются абсолютно необходимыми, поскольку они могут обойти инкапсуляцию и привести к хрупким тестам [10].

Таким образом, хотя обе утилиты Whitebox служат аналогичным целям, версия PowerMock является более полной и широко доступной, тогда как версия Mockito была удалена из -за опасений по поводу практики тестирования. Белый ящик PowerMock является мощным инструментом для доступа и манипулирования внутренними состояниями класса, но должен использоваться разумно.

Цитаты:
[1] https://stackoverflow.com/questions/40280918/what-do-use-instead-of-whitebox-in-mockito-2-2-to-set-fields
[2] https://www.javadoc.io/doc/org.powermock/powermock-reflect/1.6.5/org/powermock/reflect/whitebox.html
[3.]
[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-for-powermock/