【发布时间】:2020-05-01 08:57:24
【问题描述】:
我在一个用 Kotlin 编写的 Android 单元测试中使用 Mockito / Powermock。 我的代码如下:
verify(myCompanionMock, atLeastOnce()).someMethod(any(), any())
但我收到此错误:
Comparison Failure:
<Click to see difference>
Argument(s) are different! Wanted:
companion.someMethod(
<any java.io.File>,
<any java.io.File>
);
-> at org.powermock.core.MockGateway.doMethodCall(MockGateway.java:182)
Actual invocation has different arguments:
companion.someMethod(
null,
null
);
因此,如果我将匹配器 any() 替换为 anyOrNull()
测试通过。我已经使用调试器来验证实际的 File 对象(不是模拟)是否传递给 someMethod()。我还验证了静态 Companion 对象的模拟是否有效。 (它上面的所有其他测试都按预期运行)。
静态 Companion 类是用 Kotlin 编写的。调用 Companion 的测试类是用 Java 编写的。这些类的@PrepareForTest-annotations 设置正确(所有其他测试按预期工作)
所以我想知道我是否遗漏了什么,或者这是我不知道的 Mockito 匹配器的问题?
【问题讨论】:
-
您传递给
someMethod的File变量是否已初始化? -
是的。我在调试器会话期间验证了这一点
-
verify方法来自哪个类?如果是纯 Mockito,您是否有其他测试可以成功验证静态方法参数? PowerMock 文档描述了使用参数匹配器的不同方式:github.com/powermock/powermock/wiki/…
标签: android kotlin mockito junit4 powermockito