如何获取Mockito中调用mock的次数



我使用PowerMockito和Mockito来模拟一些静态类。我想得到一个特定的模拟对象在运行时被调用的次数,这样我就可以在另一个模拟对象的验证时间中使用这个计数。

我需要这个,因为我正在测试的方法启动一个线程,并在一秒钟后停止该线程。我的mock在这1秒内被调用了好几次。在调用第一个mock之后,可以调用代码分支和不同的mock。所以,我想将第一个模拟的计数与其他模拟的计数进行比较。

这是一个遗留代码。所以我不能更改实际的代码。我只能更改测试代码。

可能有一个更简单的解决方案,因为Mockito已经让您能够使用Mockito.verify()验证特定mock的调用次数,但我还没有找到任何返回该计数的方法,因此您可以使用答案并实现自己的计数器:

MyClass myObject = mock(MyClass.class);
final int counter = 0;
when(myObject.myMethod()).then(new Answer<Result>() {
    @Override
    public Result answer(InvocationOnMock invocation) throws Throwable {
        counter++;
        return myMockResult;
    }
}); 

doAnswer(i -> {
    ++counter;
    return i.callRealMethod();
}).when(myObject).myMethod();

这个解决方案的问题是,你需要为你正在嘲笑的每一个方法写上面的内容。


Mockito 1.10+:

实际上,在浏览了1.10版本的API之后,我发现:

Mockito.mockingDetails(mock).getInvocations();

相关内容

  • 没有找到相关文章

最新更新