我正在尝试编写一个单元测试,为此,我正在为Mockito模拟编写一个when语句,但是我似乎无法让eclipse识别我的返回值是否有效。
我是这么做的:
Class<?> userClass = User.class;
when(methodParameter.getParameterType()).thenReturn(userClass);
.getParameterType()
的返回类型是Class<?>
,所以我不明白为什么eclipse说The method thenReturn(Class<capture#1-of ?>) in the type OngoingStubbing<Class<capture#1-of ?>> is not applicable for the arguments (Class<capture#2-of ?>)
,它提供了强制转换我的userClass,但这只是使一些混乱的东西eclipse说它需要再次强制转换(不能强制转换)。
这只是Eclipse的问题,还是我做错了什么?
6条答案
按热度按时间2cmtqfgy1#
另外,一个稍微简洁一点的解决方法是使用do语法代替when。
yhived7q2#
Mockito.when
返回的OngoingStubbing<Class<?>>
与ongoingStubbing
的类型不同,因为每个“?”通配符都可以绑定到不同的类型。要使类型匹配,需要显式指定type参数:
agxfikkp3#
我不知道为什么你会得到这个错误。它一定与返回
Class<?>
有什么特殊的关系。如果你返回Class
,你的代码编译得很好。这是你正在做的事情的模拟,这个测试通过了。我想这对你也是有效的:dvtswwa34#
您可以简单地从类中删除))
jyztefdp5#
我发现这里的代码示例与methodParameter.getParameterType的用法有点混淆()首次用于已接受答案的SandBoxTest中,经过进一步挖掘,我发现another thread pertaining to this issue提供了一个更好的示例,该示例清楚地表明我需要的Mockito调用是doReturn(myExpectedClass).when(myMock).callsMyMethod(withAnyParams).使用该格式允许我模拟类的返回.希望这篇注解能帮助将来搜索类似问题的人.
n8ghc7c16#
另外两种解决方案:
在这里,我们用编译错误换取一个未检查的赋值警告:
一个不带警告的更简洁的解决方案是