Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon 我可以使用Mockito 5和Mock-Maker-Inline使用PowerMock


我可以使用Mockito 5和Mock-Maker-Inline使用PowerMock


使用PowerMock与Mockito 5和“模拟制造商”配置在技术上是可能的,但由于这些工具相互作用的方式而涉及一些考虑因素。

PowerMock和Mockito兼容性

PowerMock旨在通过嘲笑静态方法,最终类和构造函数来扩展嘲笑框架(例如Mockito)的功能。但是,PowerMock与Mockito的集成主要集中在Mockito的旧版本上。 PowerMock 2.0.0及更高版本支持Mockito 2.X,但关于其与Mockito 5.0.0的兼容性的文档有限,该文档默认使用了“模拟制造商 - 内线” [1] [5]。

Mockito 5和“模拟制造商”

Mockito 5.0.0将“模拟制造商inline”介绍为默认的``MockMaker'',从而启用了诸如模拟最终类和静态方法之类的功能。与早期版本相比,此更改简化了嘲笑复杂类的过程[9] [10]。

##将PowerMock与“模拟制造商”使用

当使用PowerMock与Mockito 5一起使用PowerMock时,由于PowerMock的内部实现及其与Mockito的“ Mockmaker”的互动,您可能会遇到问题。 PowerMock实现了自己的“ Mockmaker”,如果PowerMock和Mockito都试图同时使用不同的“ MockMaker”实现[1] [2],这可能导致冲突。

要将PowerMock与Mockito 5和“ Mock-Maker-Inline”一起使用,您通常需要在必要时将PowerMock配置为Mockito的“模拟制造商 - inline”。但是,这种配置可能很复杂,并且可能不会在所有情况下得到完全支持或记录。

###配置步骤

1。包括依赖项:确保您的项目中有正确的版本的PowerMock和Mockito。对于PowerMock,请使用诸如`powermock-api-mockito2`和`powermock-odule-junit4`'s之类的版本。对于Mockito,请使用5.0.0版或更高版本[5] [9]。

2.配置PowerMock:您可能需要配置PowerMock才能与Mockito的“模拟制造商”使用。这可能涉及设置一个配置文件,以将PowerMock的模拟操作委托给Mockito时,使用“模拟制造商inline”。

3。测试设置:使用`@runwith(powermockrunner.class)`and`@preeporfortest`测试类中的注释以启用PowerMock功能。

4.模拟:使用Mockito进行大多数模拟任务和PowerMock进行特定功能,例如静态方法在必要时模拟。

###潜在问题

- 不兼容:PowerMock自己的“ Mockmaker”可能与Mockito的“模拟制造商”冲突,如果无法正确配置,则会导致不可预测的行为。
- 有限的文档:专门针对Mockito 5使用PowerMock的指导有限,因此您可能需要尝试使用不同的配置。

总而言之,虽然在技术上可以将PowerMock与Mockito 5和“ Mock-Maker-Inline”一起使用,但设置可能很复杂,并且可能需要仔细的配置以避免两个框架之间的冲突。建议将Mockito 5的内置功能用于大多数模仿需求,并为需要其独特功能的特定场景保留PowerMock。

引用:
[1] https://github.com/powermock/powermock/wiki/mockito
[2] https://www.lambdatest.com/automation-testing-advisor/selenium/classes/org.mockito.plugins.mockmaker
[3] https://rieckpil.de/mock-java-constructors-and-their-phist-their-object-creation-with-mockito/
[4] https://stackoverflow.com/questions/6036450/powermock-mockito-vs-mockito-alone
[5] https://howtodoinjava.com/java/library/mock-testing-using-powermock-with-junit-and-mockito/
[6] https://groups.google.com/g/mockito/c/bly1pyabj94
[7] https://davidvlijmincx.com/posts/writing_higher_quality_tests_with_mockitos_inline_mock_maker/
[8] https://stackoverflow.com/questions/36536727/is-it-possible-to-sos-to-use-mockito-with-kotlin-without-without-open-open-the-class/44284452
[9] https://www.infoq.com/news/2023/01/mockito-5/
[10] https://www.javacodegeeks.com/understanding-mockito-core-vs-mockito-inline.html
[11] https://powermock.github.io