9

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

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

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

4

1 回答 1

11

可能有一个更简单的解决方案,因为 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+:

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

Mockito.mockingDetails(mock).getInvocations();
于 2015-04-02T01:32:27.157 回答