我有一个界面
MyFunctionalInterface<T> {
T execute(SomeClass var)
}
我还有一个我嘲笑的对象叫做方法
myObject.myMethod(var -> someOtherMethod(var, arg))
我通过陈述
来嘲笑这个对象ArgumentCaptor<MyFunctionalInterface> functionalInterfaceCaptor;
...
when(myMockObject.myMethod(functionalInterfaceCaptor.capture())).then(doSomething)
我想从arg
获取functionalInterfaceCaptor
的值。我知道它存储了这个值,因为当我进入Intellij调试器并单击functionalInterfaceCaptor
时,我可以查看私有字段capturingMatcher
,然后查看字段arguments
,这是包含var
值和arg
值的链接列表。但是,我无法弄清楚我需要在functionalInterfaceCaptor
上调用哪些方法才能在我的测试中看到这些(ArgumentCaptor
不会暴露任何方法)。如何获得arg
的价值?
答案 0 :(得分:2)
当您致电myObject.myMethod(var -> someOtherMethod(var, arg))
时,方法的参数是lambda var -> someOtherMethod(var, arg)
。因此,functionalInterfaceCaptor
捕获lambda本身,而不是它所调用的参数。
如果要捕获arg
,则必须模拟已定义的对象someOtherMethod
并为此方法设置ArgumentCaptor
。
答案 1 :(得分:0)
也许使用ArgumentMatcher?
when(myMockObject.myMethod(new ArgumentMatcher(functionalInterfaceCaptor))。then(doSomething)