我一直在尝试使用Mockito和PowerMockito来测试我的代码 . 我有类似于以下类的东西:
public class asdfClass{
public static String methodToMock(String item, String otheritem){
return "asdf";
}
public static String methodToMock(String item){
return "asdf";
}
}
无论出于何种原因,运行以下内容:
PowerMockito.spy(asdfClass.class);
PowerMockito.when(asdfClass.methodToMock(Mockito.any())).thenReturn("asdfghj");
似乎正确编译但正在运行
PowerMockito.spy(asdfClass.class);
PowerMockito.when(asdfClass.methodToMock(Mockito.any(), Mockito.any())).thenReturn("asdfghj");
没有,并在Mockito.any()s上吐出一个“'void'类型,这里不允许”错误 .
有谁知道怎么办?我在stackoverflow上看到的唯一其他结果表明读者看一下文档,尽管我认为它没有说明私有静态方法中的多个参数 .
(最后我希望用doNothing来模拟一个无效结果,虽然我已经解决了这个问题,我已经知道我的所有void方法都有多个参数)
编辑:没关系,得到它:Is it possible to use partial mocking for private static methods in PowerMock?(关于所选答案的评论4) . 奇怪的是,对于我所知道的一切,这并不是我的错字 .
2 回答
您模拟void方法,因此它不能返回任何内容,因此应省略
thenReturn()
语句(例如,而不是when()
,使用doNothing()
) .根据Is it possible to use partial mocking for private static methods in PowerMock?,PowerMockito.doReturn(mockData).when(DataProvider.class,"readFile",param1,param2,...)可以解决问题 .