我无法使用方法调用 ie 获取我设置为模拟对象的数据invokeMethod。我可以使用getInternalState.controller_mock = mock(MyController.class);ArrayList<BaseItem> items = new ArrayList<>();final ItemTypeOne item1 = new ItemTypeOne();final ItemTypeOne item2 = new ItemTypeOne();final ItemTypeTwo item3 = new ItemTypeTwo();final ItemTypeTwo item4 = new ItemTypeTwo();items.add(item1);items.add(item2);items.add(item3);items.add(item4);Whitebox.setInternalState(controller_mock, "mItems", items);System.out.println(controller_mock);//Prints -> myControllerSystem.out.println(Whitebox.getInternalState(controller_mock, "mItems"));//Prints -> [UNKNOWN, UNKNOWN, UNKNOWN, UNKNOWN]System.out.println(Whitebox.invokeMethod(controller_mock, "getItems"));//Prints -> []System.out.println(controller_mock.getItems());//Prints -> []getItems() 在 MyController 中public List<BaseItem> getItems() { return mItems;}
1 回答
慕哥6287543
TA贡献1831条经验 获得超10个赞
您需要在以下选项中做出选择:
模拟方法
Whitebox.invokeMethod(controller_mock, "getItems");
真实实例的getter
controller_mock.getItems();
白盒#invokeMethod
调用私有或内部类方法。这对于测试私有方法可能很有用。
只有在私有时才有效:
private List<BaseItem> getItems() {
return mItems;
}
在这种情况下,您只能在测试类中调用 getter,因为它是私有的。
controller_mock.getItems()
模拟意味着创建模拟真实对象行为的对象。由于controller_mock是mockito增强的,如果要调用真实实例的方法,需要显式设置:
when(controller_mock.getItems()).thenCallRealMethod();
System.out.println(controller_mock.getItems());
添加回答
举报
0/150
提交
取消