如何获取在 Mockito 中调用 mock 的次数
How to get the number of times a mock is called in Mockito
我正在使用 PowerMockito 和 Mockito 来模拟一些静态 类。我想获取在 运行 时间内调用特定模拟对象的次数,以便我可以在验证时间中使用该计数来验证另一个模拟对象。
我需要这个,因为我正在测试的方法启动一个线程并在一秒钟后停止该线程。我的模拟在这 1 秒内被调用了几次。调用完第一个 mock 后,可以调用代码分支和不同的 mock。所以,我想将第一个模拟的计数与其他模拟的计数进行比较。
这是遗留代码。所以我无法更改实际代码。我只能更改测试代码。
可能有更简单的解决方案,因为 Mockito 已经使您能够使用 Mockito.verify()
验证特定模拟的调用次数,但我还没有找到 return 的任何方法count 这样你就可以使用答案并实现你自己的计数器:
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 myMockResult;
}
});
或
doAnswer(i -> {
++counter;
return i.callRealMethod();
}).when(myObject).myMethod();
此解决方案的问题是您需要为您模拟的每个方法编写上述内容。
Mockito 1.10+:
实际上,在浏览 1.10
版本的 API 之后,我发现:
Mockito.mockingDetails(mock).getInvocations();
我正在使用 PowerMockito 和 Mockito 来模拟一些静态 类。我想获取在 运行 时间内调用特定模拟对象的次数,以便我可以在验证时间中使用该计数来验证另一个模拟对象。
我需要这个,因为我正在测试的方法启动一个线程并在一秒钟后停止该线程。我的模拟在这 1 秒内被调用了几次。调用完第一个 mock 后,可以调用代码分支和不同的 mock。所以,我想将第一个模拟的计数与其他模拟的计数进行比较。
这是遗留代码。所以我无法更改实际代码。我只能更改测试代码。
可能有更简单的解决方案,因为 Mockito 已经使您能够使用 Mockito.verify()
验证特定模拟的调用次数,但我还没有找到 return 的任何方法count 这样你就可以使用答案并实现你自己的计数器:
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 myMockResult;
}
});
或
doAnswer(i -> {
++counter;
return i.callRealMethod();
}).when(myObject).myMethod();
此解决方案的问题是您需要为您模拟的每个方法编写上述内容。
Mockito 1.10+:
实际上,在浏览 1.10
版本的 API 之后,我发现:
Mockito.mockingDetails(mock).getInvocations();