微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何断言是否调用了lambda

如何解决如何断言是否调用了lambda

我目前正在使用lambda(消费者或函数)作为方法的参数。

我想知道断言lambda是否已执行的最佳方法是什么。

我找到了2种解决方案,不知道哪种解决方案更好,或者是否还有其他解决方案。

  1. 使用列表并在每次调用消费者时添加对象
   List<Object> listCall = new ArrayList<>()
   myObject.myMethod((param)->listCall.add(param))
   asserThat(listCall).hasSize(wantednumberCall)

专业版:此功能有效。您可以计算通话次数

缺点:为测试类似的东西而添加自定义lambda有点尴尬

  1. 使用Mockito模拟用户/功能
   myObject.myMethod(consumerMock)
   Mockito.verify(consumerMock,Mockito.times(0)).apply(any());

专业版:Mockito有很多选项可以计算带有参数的调用

缺点:Mockito不建议模拟您不拥有的对象。而且有时需要模拟的不只是apply(Consumer)或accept(Consumer)

解决方法

可能有点过大,但是除了使用StackWalker完全将断言与lambda分开之外,什么都没想到。只需声明您的consumerMock在堆栈中的位置即可

https://docs.oracle.com/javase/9/docs/api/java/lang/StackWalker.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。