如何模拟地图的返回值?

2022-09-02 20:48:52

我有这样的代码:

for (Map.Entry<Integer, Action> entry : availableActions.entrySet()) {
  ...
}

我试图像这样嘲笑它:

Map mockAvailableActions = mock(Map.class, Mockito.RETURNS_DEEP_STUBS);
mockAvailableActions.put(new Integer(1), mockAction);

我认为这就足够了。但 entrySet 是空的。所以我加了这个:

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

“静止条目集”为空。我做错了什么?感谢您的任何输入!


答案 1

也许我错过了一些东西,但为什么不这样做:

Map.Entry<Integer, Action> entrySet = <whatever you want it to return>
Map mockAvailableActions = mock(Map.class);
when(mockAvailableActions.entrySet()).thenReturn(entrySet);

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


答案 2

推荐