Kotlin使用Mockito模拟Map时类型转换失败如何处理
Kotlin 中使用Mockito模拟Map/MutableMap的正确方案
错误原因
你代码中调用Mockito.mock时指定的泛型为Map<*, *>,和接收变量声明的Map<String, Any>泛型类型不匹配,同时Mockito原生Java API返回的裸类型在Kotlin中会存在泛型推导失效的问题。
可行解决方案
方法1:显式指定类型+安全转型(原生Mockito即可用)
直接对mock返回的对象做显式转型,Mock场景下该转型是安全的,Mockito生成的代理对象不会校验运行时泛型参数:
val staticParams: Map<String, Any> = Mockito.mock(MutableMap::class.java) as Map<String, Any>
如果你不需要模拟可变Map的能力,也可以直接模拟Map接口:
val staticParams: Map<String, Any> = Mockito.mock(Map::class.java) as Map<String, Any>
如果需要消除显式转型的unchecked警告,在变量上添加@Suppress("UNCHECKED_CAST")注解即可。
方法2:使用Mockito-Kotlin简化写法(需引入Mockito-Kotlin依赖)
如果项目中已经引入了Mockito-Kotlin扩展库,可以直接通过泛型推导自动匹配类型,不需要手动转型:
// 模拟可变Map val staticParams: MutableMap<String, Any> = mock() // 模拟不可变Map val staticParams: Map<String, Any> = mock()
内容的提问来源于stack exchange,提问作者Marc Enschede
相关产品推荐
相关产品推荐

