假设有这样一个类:
public class A {
public void smth {
}
public void smth2 {
smth();
}
}
我们用mockito监视它并进行简单的调用:
A spiedA = spy(new A());
spiedA.smth2();
之后当我们想要检索调用计数时:
Mockito.mockingDetails(spiedA).getInvocations().size()
它按预期返回两个调用。但我只想注册外部调用而无需内部代表团。有可能达到我要求的结果吗?如果只有 Mockito.Inspiration 可以提供调用堆栈,我会将其过滤掉。
最佳答案
Inspiration
类中有一个 Location location
字段。实际上内部有堆栈跟踪(这实际上是私有(private)字段,因此您应该通过反射使其可用)。之后,您可以获取所需的信息,例如:
((LocationImpl)((LinkedList<Invocation>) invocations).get(1).getLocation()).stackTraceHolder.stackTrace
但我真的不建议这样做,因为您将来不想维护该测试。
如果您确实需要,您可以将 smth()
提取到不同的类中并监视它。
关于java - 如何捕获所有mockito监视类方法调用而不计算内部委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53079758/