问题描述
我想知道断言lambda是否已执行的最佳方法是什么。
我找到了2种解决方案,不知道哪种解决方案更好,或者是否还有其他解决方案。
List<Object> listCall = new ArrayList<>()
myObject.myMethod((param)->listCall.add(param))
asserThat(listCall).hasSize(wantednumberCall)
myObject.myMethod(consumerMock)
Mockito.verify(consumerMock,Mockito.times(0)).apply(any());
缺点:Mockito不建议模拟您不拥有的对象。而且有时需要模拟的不只是apply(Consumer)或accept(Consumer)
解决方法
可能有点过大,但是除了使用StackWalker完全将断言与lambda分开之外,什么都没想到。只需声明您的consumerMock
在堆栈中的位置即可
https://docs.oracle.com/javase/9/docs/api/java/lang/StackWalker.html