如何用Mockito BDD模拟返回类型为Class<?>的方法?
解决Mockito BDD模拟Class<?>返回值的编译错误
问题原因
目标方法返回类型为Class<?>,而Comparable.class的实际类型是Class<Comparable>,Java泛型的类型推断机制无法自动适配Mockito BDD的willReturn方法,导致编译时出现Cannot resolve method 'willReturn(Class<Comparable>)'错误。
解决方案
以下几种方法都可以解决该问题:
强制类型转换
将返回值强制转换为Class<?>,让编译器明确匹配目标类型:given(serviceFactoryBean.getInterfaceClass()).willReturn((Class<?>) Comparable.class);显式指定泛型参数
调用willReturn时显式声明泛型类型,消除类型推断歧义:given(serviceFactoryBean.getInterfaceClass()).<Class<?>>willReturn(Comparable.class);使用类型转换工具方法
借助Class.cast()方法完成类型适配:given(serviceFactoryBean.getInterfaceClass()).willReturn(Class.class.cast(Comparable.class));
可选替代方案
如果不局限于BDD风格,使用Mockito标准的when-thenReturn写法也能自动适配类型:
when(serviceFactoryBean.getInterfaceClass()).thenReturn(Comparable.class);
内容的提问来源于stack exchange,提问作者Jackie Sun
相关产品推荐
相关产品推荐

