Mockito.invokeMethod: 我可以将功能接口的实现作为参数传递吗?

Mockito.invokeMethod: Can I pass an implemenation of a functional interface as an argument?

我有一个私有方法,我正在尝试使用 powermock 对其进行测试。方法参数是一个功能接口和一个对象。根据文档,Whitebox.invokeMethod 只接受对象作为参数。是否有某种技巧可以传递功能接口的实现?

Object[] arguments = new Object[]{WarehouseOrderFieldFormattingProcessor::process, warehouseOrderEntity};
Whitebox.invokeMethod(processor, "processEntity", arguments);

上面的代码片段很理想,但它无法编译,因为方法引用,而且我很确定函数接口的所有实现都不是对象。

编辑:

我要传递的方法的声明:

public WarehouseOrderProcessorResult process(WarehouseOrderEntity entity, Configuration config) throws Exception {...}

我要调用的方法的声明:

private void processEntity(ProcessEntityFunc processLambda, WarehouseOrderEntity entity) throws Exception {...}

以及功能接口:

@FunctionalInterface
public interface ProcessEntityFunc {
    WarehouseOrderProcessorResult process(WarehouseOrderEntity entity, Configuration config) throws Exception; 
}

你对函数式接口的方法引用和实现不对,你可以把lambda放到数组中:

Object myObject = new Object();
Consumer<Object> consumer = (Object item) -> System.out.println("Hello world");
Object[] arguments = new Object[]{consumer, myObject};

编辑:

当您尝试调用非静态方法时,您应该创建 WarehouseOrderFieldFormattingProcessor 的实例,然后将方法引用分配给函数接口 ProcessEntityFunc 类型的变量,然后才将其传递给数组:

WarehouseOrderFieldFormattingProcessor warehouseOrderFieldFormattingProcessor = new WarehouseOrderFieldFormattingProcessor();
ProcessEntityFunc testFunction = warehouseOrderFieldFormattingProcessor::process;
Object[] arguments = new Object[]{testFunction, warehouseOrderEntity};
Whitebox.invokeMethod(processor, "processEntity", arguments);