Den*_*ühn 4 java unit-testing mockito
问题: Mockito 在测试代码语句中抛出 NPE,特别verify是带有参数匹配器的调用,除了测试代码行之外没有进一步指示原因。
执行测试代码时的实际异常不仅缺乏信息,而且还具有误导性:
de.example.testing.TmpTest.testSomething 处的 java.lang.NullPointerException(TmpTest.java:31)
要测试的代码的非常缩小的示例:
class Medium {
void setLock(boolean locked) {
// do stuff
}
// and other functionality ...
}
Run Code Online (Sandbox Code Playgroud)
测试代码:
@Test
void testSomething() {
// call testing code
verify(_medium, never())
.setLock(any()); // <-- NPE
}
Run Code Online (Sandbox Code Playgroud)
在此示例中,_medium是一个有效的 Mock,并且 的执行verify(_medium, never())也返回一个非空的 MockitoMock 实例。
Den*_*ühn 16
解决方案是:您不能使用any()来匹配原始类型的参数。
在这种情况下,Mockito 提供anyBoolean(),与所有其他原语一样。然而,由于 NPE,这并不明显,可能会导致广泛的搜索和头痛。
| 归档时间: |
|
| 查看次数: |
1745 次 |
| 最近记录: |