如何从 Mockito 模拟中获取每个方法的调用?

How can I get invocations per method from a Mockito mock?

我想从 Mockito 模拟中获取每个给定方法的调用次数。

假设我为它声明了一个模拟和两个存根:

when(mock.methodA()).thenReturn(..);
when(mock.methodB()).thenReturn(..);

我可以做类似 Mockito.mockingDetails(mock).getInvocations() 的事情,但它 returns 是所有调用的集合。我只想获得 methodA 的一些调用。

尝试使用verify(),例如:

verify(mock, times(N)).methodA();
verify(mock, times(N)).methodB();

N 检查调用编号时。

要获取有关特定方法的数据,请仅使用那个:

 new DefaultMockingDetails(service).getInvocations()
                    .stream()
                    .map(InvocationOnMock::getMethod)
                    .filter(s -> s.getName().equals("methodName"))
                    .collect(toList())

此方法将为该模拟 return 集合调用。

有关详细信息,请参阅 here

我想我忽略了 Invocation 对象有一个 getMethod 属性 继承自超类 InvocationOnMock。因此可以这样做:

Mockito.mockingDetails(mock).getInvocations().stream()
                        .map(InvocationOnMock::getMethod)
                        .map(Method::getName)
                        .filter(methodName -> methodName.equals("methodA"))

不是很整洁,但也够用了。