2015-04-02 85 views
4

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

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

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

回答

3

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

该解决方案的问题在于,您需要针对您嘲笑的每种方法编写上述内容。

@Edit:通过API去为1.10版本之后其实我发现这一点:

Mockito.mockingDetails(mock).getInvocations(); 
+0

getInvocations()在某些情况下,给出了错误的值。可能是模拟调用值在读取时尚未更新。在阅读getInvocations之前,我必须睡一会儿,但睡眠是我想在测试中写的最后一件事。 – TechCrunch 2015-04-02 04:03:03

+0

@TechCrunch在这种情况下,我唯一可以提出的解决方案是我上面发布的或某种AOP,但我认为这会太过分了 – 2015-04-02 04:28:33

+0

@TechCrunch能不能粘贴显示getInvocations()时显示的代码错误的价值? – 2016-06-18 02:10:44