如何获得Mockito中调用模拟的次数

时间:2015-04-02 01:09:52

标签: unit-testing junit mockito powermock powermockito

我正在使用PowerMockito和Mockito来模拟几个静态类。我想获得在运行时调用特定模拟对象的次数,以便我可以在另一个模拟对象的验证时间中使用该计数。

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

这是遗留代码。所以我无法对实际代码进行更改。我只能更改测试代码。

1 个答案:

答案 0 :(得分:7)

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

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 result;
    }
}); 

此解决方案的问题在于您需要为您正在嘲笑的每种方法编写上述内容。


Mockito 1.10 +:

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

Mockito.mockingDetails(mock).getInvocations();