unit-testing - 如何获得在 Mockito 中调用模拟的次数

标签 unit-testing junit mockito powermock powermockito

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

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

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

最佳答案

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

关于unit-testing - 如何获得在 Mockito 中调用模拟的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29403436/

相关文章:

c# - 单元测试继承

flutter - 单元测试 GetxController

java - 将 @Mock 注入(inject)另一个 @Mock 或重构?

java - 如何创建以下方法的模拟测试

unit-testing - Chutzpah 和 Jasmine typescript 单元测试

angular - 在 Angular CLI 项目中使用 Jasmine 自定义匹配器

java - JerseyIncation 表达式在类中不可用,但可通过 IntelliJ 调试器中的 Evaluate 表达式访问

java - 断言列表恰好包含一个满足条件的元素

junit - 为 junit 的 @FixMethodOrder 创建我自己的 MethodSorter

java - 无法使用 InjectMocks-Mockito 实例化模拟对象