mockito-inline与powermock-api-mockito2结合使用bug(org.mockito.exceptions.base.MockitoException)集合

发布时间 2023-11-17 15:37:38作者: 我认识你

Mockito 3.4版本以后开始支持模拟静态方法,结合powermock-api-mockito2使用时,依赖引入顺序不当,会导致出现如下错误:

org.mockito.exceptions.base.MockitoException:
The used MockMaker PowerMockMaker does not support the creation of static mocks

Mockito's inline mock maker supports static mocks based on the Instrumentation API.
You can simply enable this mock mode, by placing the 'mockito-inline' artifact where you are currently using 'mockito-core'.
Note that Mockito's inline mock maker is not supported on Android.

如果引入的顺序颠倒,可能会导致以下问题:

  • 冲突的类加载器:如果先引入powermock-api-mockito2,它可能会尝试加载自己的类加载器,与Mockito的类加载器冲突,导致类加载错误。
  • MockMaker不兼容:当使用PowerMock进行测试时,如果先引入了PowerMock的相关库而没有引入mockito-inline,可能会导致MockMaker不兼容的问题。这是因为PowerMock默认使用自己的MockMaker,而不是Mockito的MockMaker。这可能导致模拟失败或出现其他意外的行为。
  • 功能缺失:如果先引入了PowerMock的相关库而没有引入mockito-inline,可能会导致某些使用Mockito的功能在PowerMock测试中无法正常工作。例如,使用Mockito的注解和静态方法模拟功能可能无法正常工作。


综上所述,为了确保正常的测试和模拟行为,建议按照正确的顺序引入mockito-inline和powermock-api-mockito2库。正确的引入顺序应该是先引入mockito-inline,再引入powermock-api-mockito2。这样可以确保内联mock maker能够正确加载并支持PowerMock的功能。