Java 如何模拟映射的返回值?

Java 如何模拟映射的返回值?,java,mockito,Java,Mockito,我有这样的代码: for (Map.Entry<Integer, Action> entry : availableActions.entrySet()) { ... } 我想那就足够了。但是entrySet是空的。所以我补充说: when(mockAvailableActions.entrySet().iterator()).thenReturn(mockIterator); when(mockIterator.next()).thenReturn(mockAction);

我有这样的代码:

for (Map.Entry<Integer, Action> entry : availableActions.entrySet()) {
  ...
}
我想那就足够了。但是entrySet是空的。所以我补充说:

when(mockAvailableActions.entrySet().iterator()).thenReturn(mockIterator);
when(mockIterator.next()).thenReturn(mockAction);

仍然entrySet为空。我做错了什么?谢谢你的意见

也许我遗漏了什么,但为什么不这样做呢:

Map.Entry<Integer, Action> entrySet = <whatever you want it to return>
Map mockAvailableActions = mock(Map.class);
when(mockAvailableActions.entrySet()).thenReturn(entrySet);
Map.Entry入口集=
Map mockAvailableActions=mock(Map.class);
当(mockAvailableActions.entrySet())。然后返回(entrySet);

也考虑一下你是否真的需要一个模拟地图,一个真正的地图不会做这项工作吗?mock通常用于替换您不想参与单元测试的代码的其他部分,Map是核心Java语言的一部分,通常不会被模拟出来。

是的,这是我的第一个想法。但是“Map.Entry entrySet=”看起来像什么?条目无法实例化,所以我要定义变量?你是对的Codebox-这个答案根本不是要模拟映射。
Map.Entry<Integer, Action> entrySet = <whatever you want it to return>
Map mockAvailableActions = mock(Map.class);
when(mockAvailableActions.entrySet()).thenReturn(entrySet);