尝试验证静态方法时出现 NotAMockException

NotAMockException when trying to verify a static method

我正在尝试验证在单元测试的特定配置中未调用静态方法。

因此我正在使用 PowerMock (powermock-core:2.0.4 & powermock-module-junit4:2.0.4) 及其 Mockito API (powermock-api-mockito2:2.0.4).

做的时候

PowerMockito.mockStatic(MyClass.class);

serviceUnderTest.methodThatShouldNotCallStaticMethod(arg1, arg2); //service not of type MyClass of course

PowerMockito.verifyStatic(MyClass.class, never());
MyClass.staticMethod(any(), any());

关于 class 中的测试方法,注释为

@RunWith(PowerMockRunner.class)
@PrepareForTest({MyClass.class})

我收到以下错误:org.mockito.exceptions.misusing.NotAMockException: Argument passed to verify() is of type Class and is not a mock!

我做错了什么,如何解决?

谢谢

原来是a Powermock bug...

这里 the workaround 给任何可能感兴趣的人:

  1. 删除 gradle
  2. 中的第 testImplementation 'org.mockito:mockito-inline:2.13.0
  3. 创建一个由单行mockito.mock-maker-class=mock-maker-inline
  4. 组成的src\test\resources\org\powermock\extensions\configuration.properties文件

我没有 mockito-inline 而我有 mock-maker.inline,我的设置是 org.powermock:powermock-api-mockito2:2.0.9org.mockito:mockito-core:3.10.0

但是我发现 PowerMockito.verifyStatic 在下面使用 Mockito.verify 并且当检查 class 时 isMock mockito 使用错误的 MockMaker 并且找不到mockedStatics 集合中的 class。

我用的时候

Mockito.mockStatic(MyClass.class);

而不是

PowerMockito.mockStatic(MyClass.class);

它开始对我有用。