将参数传递到函数接口的 ArgumentCaptor 中



我有一个接口

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(

相关内容

  • 没有找到相关文章

最新更新