如何在不计算内部委托的情况下捕获所有mockito监视的类方法调用



假设使用类似的类

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中,带有自定义调用处理程序。

最新更新