【问题标题】:NotAMockException when trying to verify a static method尝试验证静态方法时出现 NotAMockException
【发布时间】:2020-03-04 06:45:15
【问题描述】:

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

因此,我正在使用 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());

在用

注释的类中的测试方法上
@RunWith(PowerMockRunner.class)
@PrepareForTest({MyClass.class})

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

我做错了什么以及如何解决?

谢谢

【问题讨论】:

  • 除了 any() 之外,一切似乎都很好,最好将其转换为正确的非原始类型或正确的原始类型,如 anyString()...等
  • 感谢您的最佳实践!

标签: java android unit-testing powermockito


【解决方案1】:

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

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

我用的时候

Mockito.mockStatic(MyClass.class);

而不是

PowerMockito.mockStatic(MyClass.class);

它开始对我很好。

【讨论】:

  • 无论如何,如果有人说我的答案是 100% OK,我会同意,因为我刚刚发现 PowerMockito.mockStatic 与 PowerMockito.verifyStatic 一起使用的情况,但是我找不到问题出在哪里。我已经对 mockito 进行了非常深入的调试,但是……至少我的解决方案可以在我需要的地方工作
【解决方案2】:

原来是a Powermock bug...

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

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

【讨论】:

  • 如果你在 src/test/resources/mockito-extensions 下已经有 org.mockito.plugins.MockMaker 文件,记得删除它!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多