繁体   English   中英

Mockito mockingDetails.getInvocations() 问题

[英]Mockito mockingDetails.getInvocations() question

我想要做的是打印出使用 Mockito 调用某个方法的次数。

当我执行以下操作时:

 int counter =
    Mockito.mockingDetails(myDependency)
        .getInvocations()
        .size();
System.out.println( counter );

它打印出模拟上调用的所有方法,但是,我只想打印出一个特定方法的计数器,所以如果我尝试,

 int counter =
    Mockito.mockingDetails(myDependency.doSomething())
        .getInvocations()
        .size();
System.out.println( counter );

它发生错误,说

传递给 Mockito.mockingDetails() 的参数应该是一个模拟,但为空!

有谁知道如何解决这个问题? 提前致谢!

你可以玩反射:

MockingDetails mockingDetails = Mockito.mockingDetails(myDependency);

Method doSomethingMethod = mockingDetails.getMockHandler()
    .getMockSettings()
    .getTypeToMock()
    .getMethod("doSomething"); //here you can also pass the arguments of this method

long counter = mockingDetails.getInvocations()
    .stream()
    .filter(invocation -> invocation.getMethod().equals(doSomethingMethod))
    .count();

请注意,为了获取Method类的对象,我们不能简单地调用myDependency.getClass().getMethod("doSomething")因为在这种情况下getClass()将返回运行时生成的 Mockito 的包装类及其自己的Method对象. 所以过滤器中的equals稍后会返回false

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM