Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon PowerMock的Mockmaker与Mockito的Mock-Maker-Inline有何不同


PowerMock的Mockmaker与Mockito的Mock-Maker-Inline有何不同


PowerMock和Mockito都用于在Java中嘲笑,但它们具有不同的目的并具有不同的功能,尤其是在如何通过各自的“ Mockmaker”实现进行嘲笑时。

PowerMock的无名师

PowerMock通过提供更强大的功能来扩展其他模拟库,例如Easymock和Mockito。它使用自定义的classloader和字节码操作来模仿静态方法,构造函数,最终类和方法,私有方法以及静态初始化器的删除[4] [9]。 PowerMock的“ Mockmaker”是由``PowerMockmaker''类实施的,如果需要,该班级会委派给另一个“ Mockmaker”。如果正确配置了PowerMock,PowerMock可以与其他模拟框架一起工作[7]。

PowerMock的方法更具侵入性,需要字体上的操纵才能实现其先进的模拟功能。这对于仅莫科托(Mockito)就不足的复杂场景可能是有益的,例如嘲笑静态方法或私人方法[9]。

Mockito的模拟制造商在线

Mockito的“ Mock-Maker-Inline”是一项介绍的功能,旨在模拟最终类和方法。它不需要诸如PowerMock之类的字节码操作,而是使用Java的仪器API在运行时修改类。这种方法不那么侵入性,不需要自定义的classloader [2] [8]。

要启用``模拟模拟制造商inline'',您通常会在`src/test/test/courcement/mockito-extensions`目录中添加一个名为“ org.mockito.mockito.plugins.mockmaker”的文件。另外,您可以使用“ Mockito-Inline”工件,该工件通过不需要手动配置“ MockMaker”扩展文件[2] [10]来简化过程。

Mockito 5.0.0及以后的版本使用“模拟制造商inline”作为默认模拟制造商,使得在没有其他配置的情况下更容易模拟最终类和方法[3] [10]。

###密钥差异

- 侵入性:PowerMock由于使用字节码操纵和自定义classloader而更具侵入性,而Mockito的“模拟制造商”使用Java Instrumentation,这是侵入性的较少。
- 功能:PowerMock可以模拟静态方法,构造函数和私人方法,而摩索哥无法在没有其他工具(例如“ Mockito-Inline”)的最终类和方法的其他工具。
- 配置:PowerMock需要特定的配置才能将其委派给其他“ MockMaker”实现,而Mockito的`模拟Maker-Inline'可以使用简单的配置文件启用或使用“ Mockito-Inline” Artifact。
- 默认行为:在Mockito 5及以后,“模拟制造商inline”是默认值,而PowerMock总是需要明确的设置来使用其高级功能。

总而言之,尽管PowerMock和Mockito的“ Mock-Maker-Inline”都增强了模拟能力,但它们的方法,侵入性和支持的模拟类型都有很大差异。 PowerMock更强大,但也更复杂,而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-betweeen-mockito-core-vs-mockito-inline
[4] https://powermock.github.io
[5] https://javadoc.io/static/org.mockito/mockito-core/3.2.4/org/mockito/mockito/plugins/inlinlinllinemockmaker.html
[6] https://www.lambdatest.com/automation-testing-advisor/selenium/classes/org.mockito.plugins.mockmaker
[7] https://www.lambdatest.com/automation-testing-testing-advisor/selenium/classes/org.powermock.api.mockito.mockto.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-work-work-to-mock-final-final-methods