Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Які основні відмінності між білкою PowerMock та Whitebox Mockito


Які основні відмінності між білкою PowerMock та Whitebox Mockito


Whitebox PowerMock та Mockito's Whitebox - це обидва комунальні класи, які використовуються для доступу та маніпулювання внутрішніми станами класів, але вони мають чіткі відмінності у своїх походженнях, функціональних можливостях та контекстах використання.

Походження та доступність

- Whitebox Mockito: Це був внутрішній клас у макет, який дозволив користувачам встановлювати внутрішні стани об'єктів. Однак він був вилучений з Mockito 2.x через занепокоєння щодо сприяння поганим тестувальним практикам і тому, що він не був призначений для громадського використання [11]. Користувачам, які покладалися на це, рекомендується перейти на такі альтернативи, як PowerMock's Whitebox або реалізувати власні утиліти з рефлексії [3].

- Whitebox PowerMock: Це частина бібліотеки PowerMock, яка розширює можливості Mockito, дозволяючи знущатися над приватними, статичними та остаточними методами, серед інших особливостей [5]. Whitebox PowerMock забезпечує спрощену утиліту відбиття, призначену для тестів, що дозволяє отримати доступ до приватних членів та покликання приватних методів [2] [6].

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

- Whitebox Mockito (історична): Перед його видаленням Whitebox Mockito дозволила користувачам встановлювати внутрішні стани об'єктів за допомогою таких методів, як `setInternalstate`. Це було корисно для введення макетів у заняття без публічних сеттерів.

- Whitebox PowerMock: пропонує більш широкий набір функціональних можливостей, включаючи:
- Доступ до приватних членів: такі методи, як `getInternalstate`, дозволяють отримати пошук цінностей приватного поля.
- Закликати приватні методи: метод `invokemethod` може викликати приватні методи, включаючи статичні [4] [10].
- Встановлення приватних полів: Незважаючи на те, що явно не задокументований, білий ящик PowerMock може бути використаний для встановлення приватних полів за допомогою відображення, хоча це не є його основним призначенням.

контекст використання

- Whitebox Mockito: Оскільки він більше не доступний у Mockito 2.x, користувачам рекомендується використовувати такі альтернативи, як PowerMock's Whitebox або Spring's `ReflectionTestutils`, якщо це можливо [1] [3].

- Whitebox PowerMock: Зазвичай використовується в сценаріях, де необхідний прямий доступ до приватних членів або методів, часто в застарілому коді або при тестуванні складної логіки, яку неможливо легко відновити. Однак, як правило, рекомендується уникати використання таких комунальних послуг, якщо це абсолютно не потрібно, оскільки вони можуть обійти інкапсуляцію та призвести до крихких тестів [10].

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

Цитати:
[1] https://stackoverflow.com/questions/40280918/what-do-i-use-instead-of-whitebod
[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-for-powermock/