假设使用类似的类
public class A {
public void smth {
}
public void smth2 {
smth();
}
}
我们用mockito监视它,并打一个简单的电话:
A spiedA = spy(new A());
spiedA.smth2();
之后,当我们想要检索呼叫计数时:
Mockito.mockingDetails(spiedA).getInvocations().size()
它按预期返回两个调用。但我只想登记外部电话,不想登记内部代表团。有可能达到我要求的结果吗?如果Mockito.Invocation能提供调用堆栈,我会过滤掉它。
Invocation
类中有Location location
字段。In内部实际上有堆栈跟踪(这实际上是私有字段,所以应该通过反射使其可用(。然后你可以获取所需的信息,比如:
((LocationImpl)((LinkedList<Invocation>) invocations).get(1).getLocation()).stackTraceHolder.stackTrace
但我真的不建议这样做,因为您将来不想维护该测试。如果你真的需要,你可以将smth()
提取到不同的类中并监视它。
问题解决了。包装在java.lang.reflect.Proxy中,带有自定义调用处理程序。