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

Tec*_*nch 8 junit unit-testing mockito powermock powermockito

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

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

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

Mat*_*zyk 8

可能有一个更简单的解决方案,因为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;
    }
}); 
Run Code Online (Sandbox Code Playgroud)

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

@Edit:实际上在浏览版本的API之后1.10我发现了这个:

Mockito.mockingDetails(mock).getInvocations();
Run Code Online (Sandbox Code Playgroud)

  • 有没有办法使用mockingDetails.getInitations来确定在模拟/间谍上调用具有某些参数的函数的次数? (3认同)
  • @TechCrunch您能否粘贴getInvocations()给出错误值时显示的代码? (2认同)