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