java - Mockito.invokeMethod:我可以将功能接口的实现作为参数传递吗?
问题描述
我有一个私有方法,我正在尝试使用 powermock 进行测试。方法参数是功能接口和对象。根据文档, Whitebox.invokeMethod 只接受对象作为参数。是否有某种技巧来传递功能接口的实现?
IE
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);
推荐阅读
- android - 如何解决错误:链接文件资源失败
- elixir - 使用模块作为常量
- reactjs - 输入单选按钮错误地设置了布尔值的状态
- html - 以角度选择一排图像中的单个图像
- python - Django NoReverseMatch:找不到反向,不是有效的视图函数或模式名称
- react-native - 不变违规:此导航器缺少 Navigaion 道具
- c++ - c++,如何将向量复制到向量的向量中?
- user-interface - 关于弹出框/抽屉菜单中常见UI设计元素的问题
- docker - 无法连接到主机上映射的 docker 容器端口
- peewee - 从 Peewee 中的组合查询中选择列