如何Mock特定方法返回的Map,调用get方法时返回指定值?
错误原因
你当前的写法存在Mockito的Stub规则误用:Mockito解析when(provider.get().get(any())).thenReturn(ObjectOne)时,会优先匹配第一个被调用的Mock方法也就是provider.get(),它的返回值类型是Map<Enum, Object>,但你指定的返回值是Object类型,二者类型不匹配,因此抛出类型错误。
解决方法
你需要分两步Stub,先指定provider.get()返回一个你自定义的Mock Map实例,再单独为这个Map实例指定特定key的返回值。该Mock Map仅绑定到provider.get()的返回值,不会影响全局其他Map的行为,完全符合你的需求。
示例代码如下:
import org.mockito.Mockito; // 前提:provider已经是Mockito生成的Mock实例 // 1. 声明一个专门给provider.get()用的Mock Map Map<Enum, Object> mockMap = Mockito.mock(Map.class); // 2. 为该Mock Map配置指定key的返回值 when(mockMap.get(Enum.ONE)).thenReturn(ObjectOne); // 3. 配置provider.get()返回上面的Mock Map when(provider.get()).thenReturn(mockMap);
配置完成后,调用provider.get().get(Enum.ONE)就会返回你预期的ObjectOne,未单独配置的其他key默认返回null,你也可以按需为其他key单独添加返回规则。
内容的提问来源于stack exchange,提问作者Rawr
相关产品推荐
相关产品推荐

