Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Чем Mockmaker's PowerMock отличается от Mockito Mock-Mocker-Line


Чем Mockmaker's PowerMock отличается от Mockito Mock-Mocker-Line


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