PowerMock та Mockito використовуються для знущання над Java, але вони служать різним цілям і мають чіткі риси, особливо в тому, як вони поводяться з глузуванням у відповідних реалізаціях `Mockmaker`.
Mockmaker PowerMock
PowerMock розширює інші макетні бібліотеки, такі як Easymock та Mockito, надаючи більш потужні можливості. Він використовує спеціальний маніпуляцію класу та байт -коду, щоб забезпечити змішання статичних методів, конструкторів, остаточних класів та методів, приватних методів та видалення статичних ініціалізаторів [4] [9]. "MockMaker" PowerMock реалізується класом "PowerMockMaker", який делегатує, що вимагає іншого "mockmaker", якщо це потрібно. Це дозволяє PowerMock працювати разом з іншими глузуючими рамками без конфліктів, за умови, що він налаштований правильно [7].
Підхід PowerMock є більш інвазивним, вимагаючи маніпуляції з байт -кодом для досягнення своїх вдосконалених можливостей знущань. Це може бути корисним для складних сценаріїв, коли самок макет є недостатнім, наприклад, знущання статичних методів або приватних методів [9].
Mockito Mocker-Inline
"Mocker-Maker-Inline" Mockito-це особливість, яка дозволяє знущатися над остаточними класами та методами. Це не вимагає маніпуляції з байт -кодом, як PowerMock, а натомість використовує API приладів Java для зміни класів під час виконання. Цей підхід менш інвазивне і не потребує спеціального класу класу [2] [8].
Щоб увімкнути `Mock-Maker-Inline`, ви, як правило, додаєте файл під назвою` org.mockito.plugins.mockmaker` з вмістом `mocker-inline` в` src/test/resources/mockito-extensions`. Крім того, ви можете використовувати артефакт `mockito-inline`, який спрощує процес, не вимагаючи вручну конфігурації файлу розширення` mockmaker` [2] [10].
Mockito 5.0.0 та пізніші версії використовують `макет-виробник-inline` як макет за замовчуванням, що полегшує знущання над остаточними класами та методами без додаткової конфігурації [3] [10].
Ключові відмінності
-Інвазивність: PowerMock є більш інвазивним завдяки використанню маніпуляції з байт-кодом та користувальницьким завантажувачем класу, в той час як Mockito Mocker-Inline 'використовує інструментарій Java, що є менш інвазивним.
- Можливості: PowerMock може знущатися над статичними методами, конструкторами та приватними методами, які Mockito не може обійтися без додаткових інструментів, таких як `mockito-inline` для остаточних класів та методів.
-Конфігурація: PowerMock вимагає конкретної конфігурації, щоб делегувати інші реалізації `mockmaker`, тоді як` макет-виробник Mockito `Mocker-inline` може бути включений за допомогою простого файлу конфігурації або за допомогою артефакту` mockito-inline`.
-Поведінка за замовчуванням: У Mockito 5 та пізніше "Mocker-Inline"-це за замовчуванням, тоді як PowerMock завжди вимагає явного налаштування для використання своїх розширених функцій.
Підсумовуючи це, хоча і PowerMock, і Mockito "Mocker-Maker-Inline" розширюють знущальні можливості, вони суттєво відрізняються своїм підходом, інвазивністю та типами глузування, які вони підтримують. PowerMock є більш потужним, але також складнішим, тоді як "Mocker-Maker-Inline" Mockito пропонує простіший спосіб знущатися над остаточними класами та методами.
Цитати:[1] https://github.com/powermock/powermock/wiki/mockito
[2] https://davidvlijmincx.com/posts/writing_higher_quality_tests_with_mockitos_inline_mock_maker/
[3] https://stackoverflow.com/questions/65986197/difference-betweend-mockito-core-vs-mockito-inline
[4] https://powermock.github.io
[5] https://javadoc.io/static/org.mockito/mockitocore/3.2.4/org/mockito/plugins/inlinemockmaker.html
[6] https://www.lambdatest.com/automation-testing-advisor/selenium/classes/org.mockito.plugins.mockmaker
[7] https://www.lambdatest.com/automation-testing-advisor/selenium/classes/org.powermock.api.mockito.mockmaker.powermockmaker
[8] https://davidvlijmincx.com/posts/mockito_mock_final_methods_and_classes/
[9] https://stackoverflow.com/questions/6036450/powermock-mockito-vs-mockito-Vone
[10] https://stackoverflow.com/questions/53274463/what-is-mockito-inline-and-how-does-it-work-to-mock-final-methods