PowerMock и Mockito используются для насмешек в Java, но они служат разным целям и имеют различные особенности, особенно в том, как они справляются с насмешками в соответствии с соответствующими реализациями «Mockmaker».
PowerMock's Mockmaker
PowerMock расширяет другие фиктивные библиотеки, такие как EasyMock и Mockito, предоставляя более мощные возможности. Он использует пользовательскую манипуляцию класса и манипуляции с байт -кодом, чтобы обеспечить насмешку статических методов, конструкторов, окончательных классов и методов, частных методов и удаления статических инициализаторов [4] [9]. PowerMock 'Mockmaker` реализован классом PowerMockMaker`, который делегаты вызывает другому «Mockmaker», если это необходимо. Это позволяет PowerMock работать вместе с другими смешными рамками без конфликтов, при условии, что он настроен правильно [7].
Подход PowerMock более инвазивный, требующий манипулирования байт -кодом для достижения своих расширенных возможностей издевательства. Это может быть полезным для сложных сценариев, где только Mockito недостаточно, таких как насмешливые статические методы или частные методы [9].
Mockito's Mock-Mocker-Inline
Mockito 'Mock-Maker-Inline`-это функция, представленная для насмешек от окончательных классов и методов. Он не требует манипуляции с байт -кодом, как PowerMock, а вместо этого использует API инструментов Java для изменения классов во время выполнения. Этот подход менее инвазивный и не нуждается в пользовательском классовом загрузке [2] [8].
Чтобы включить «Mock-Maker-inline», вы обычно добавляете файл с именем `org.mockito.plugins.mockmaker` с контентом` mock-maker-inline` в каталоге `src/test/resources/mockito-extensions`. В качестве альтернативы, вы можете использовать артефакт «Mockito-inline», который упрощает процесс, не требуя ручной конфигурации файла расширения `mockmaker` [2] [10].
Mockito 5.0.0 и более поздние версии используют `Mock-Maker-Inline` в качестве макета по умолчанию, что облегчает издевание за окончательные классы и методы без дополнительной конфигурации [3] [10].
Ключевые различия
-Инвазивность: PowerMock более инвазивен из-за использования манипуляций с байт-кодом и пользовательского загрузчика класса, в то время как Mockito «Mock-Maker-Inline» использует инструменты Java, что менее инвазивное.
- Возможности: PowerMock может издеваться над статическими методами, конструкторами и частными методами, которые Mockito не может обойтись без дополнительных инструментов, таких как «Mockito-inline» для окончательных классов и методов.
-Конфигурация: PowerMock требует конкретной конфигурации для делегирования в другие реализации `mockmaker`, тогда как« Mock-Mocker-Inline »Mockito может быть включен с помощью простого файла конфигурации или с помощью артефакта` mockito-inline.
-Поведение по умолчанию: в Mockito 5, а позже «Mock-Maker-Inline»-это по умолчанию, тогда как PowerCock всегда требует явной настройки для использования своих расширенных функций.
Таким образом, хотя и PowerMock, и Mockito «Mock-Mocker-Inline» расширяют возможности насмешки, они значительно различаются по своему подходу, инвазивности и типам насмешек, которые они поддерживают. PowerMock более мощный, но и более сложный, тогда как «Mock-Mock-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-between-mockito-core-vs-mockito-inline
[4] https://powermock.github.io
[5] https://javadoc.io/static/org.mockito/mockito-core/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-alone
[10] https://stackoverflow.com/questions/53274463/what-is-mockito-inline-and-how-does-it-work-to-mock-final-methotods