2017-02-11 36 views
1

的ArgumentCaptor我有一个接口获取参数传递到功能界面

MyFunctionalInterface<T> { 
    T execute(SomeClass var) 
} 

我也有一个对象,我嘲笑调用的方法

myObject.myMethod(var -> someOtherMethod(var, arg)) 

我时指出

嘲讽这个对象
ArgumentCaptor<MyFunctionalInterface> functionalInterfaceCaptor; 
... 
when(myMockObject.myMethod(functionalInterfaceCaptor.capture())).then(doSomething) 

我想从我的中获得arg的值3210。我知道它正在存储这个值,因为当我进入Intellij调试器并点击functionalInterfaceCaptor时,我可以看看私有字段capturingMatcher,然后是arguments那个,这是一个包含值为var的链接列表,值为arg。然而,我不知道我需要调用什么方法functionalInterfaceCaptor在我的测试中看到这些(ArgumentCaptor不公开任何)。我如何得到arg的价值?

回答

0

或许使用ArgumentMatcher

时(myMockObject.myMethod(新ArgumentMatcher(functionalInterfaceCaptor))。然后(DoSomething的)

2

当你调用myObject.myMethod(var -> someOtherMethod(var, arg))那么该方法的参数是拉姆达var -> someOtherMethod(var, arg)。因此您的functionalInterfaceCaptor捕捉拉姆达本身,而不是它的参数如果你想捕捉arg那么你就嘲笑这种方法someOtherMethod上定义的对象和设置的ArgumentCaptor被调用。