Mockito verify出现NullPointerException错误

3
问题: 在测试代码语句中,特别是带有参数匹配器的verify调用中,Mockito会抛出NPE,但没有进一步指示原因,仅显示测试代码行。

执行测试代码时实际异常不仅缺乏信息,而且还具有误导性:

java.lang.NullPointerException at de.example.testing.TmpTest.testSomething(TmpTest.java:31)

被测试代码的非常简化的示例:

class Medium {
    void setLock(boolean locked) {
        // do stuff
    }

    // and other functionality ...
}

测试代码:

@Test
void testSomething() {
    // call testing code
    
    verify(_medium, never())
        .setLock(any()); // <-- NPE
}

在这个例子中,_medium 是一个有效的Mock对象,而执行verify(_medium, never())也会返回一个非空的MockitoMock实例。
1个回答

15
解决方案是:您不能使用any()来匹配原始类型的参数。

在这种情况下,Mockito提供了anyBoolean(),以及其他所有基本类型。然而,由于NPE,这并不明显,可能导致对代码进行大量搜索和仔细思考。

谢谢。这个错误每次都会让我措手不及。我想知道为什么其他Mockito的错误通常都很口头(尝试在未模拟的类上调用verify),而这个错误却完全不是这样。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接