我有一个接口
MyFunctionalInterface<T> {
T execute(SomeClass var)
}
我还有一个我正在嘲笑的对象,它调用了一个方法
myObject.myMethod(var -> someOtherMethod(var, arg))
我通过声明来嘲笑这个对象
ArgumentCaptor<MyFunctionalInterface> functionalInterfaceCaptor;
...
when(myMockObject.myMethod(functionalInterfaceCaptor.capture())).then(doSomething)
我想从我的functionalInterfaceCaptor
中获取arg
的价值。我知道它正在存储此值,因为当我进入 Intellij 调试器并单击functionalInterfaceCaptor
时,我可以查看私有字段capturingMatcher
,然后查看该字段arguments
,这是一个包含 var
值和 arg
值的链表。但是,我无法弄清楚我需要调用什么方法functionalInterfaceCaptor
才能在我的测试中看到这些(ArgumentCaptor
不会公开任何方法(。如何获取arg
的值?
当你调用myObject.myMethod(var -> someOtherMethod(var, arg))
时,该方法的参数是lambda var -> someOtherMethod(var, arg)
。因此,您的functionalInterfaceCaptor
捕获 lambda 本身,而不是调用它的参数。
如果要捕获arg
则必须模拟定义someOtherMethod
的对象,并为此方法设置ArgumentCaptor
。
也许使用ArgumentMatcher?
when(myMockObject.myMethod(new ArgumentMatcher (functionalInterfaceCaptor((.then(doSomething(