我一直在尝试使用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)。奇怪的是,这之前没有用,但这对我所知道的一切都可能是一个错字。
答案 0 :(得分:1)
您模拟void方法,因此无法返回任何内容,因此应省略thenReturn()
语句(例如,而不是when()
,请使用doNothing()
)。
答案 1 :(得分:1)
根据Is it possible to use partial mocking for private static methods in PowerMock?,PowerMockito.doReturn(mockData).when(DataProvider.class," readFile",param1,param2,...)可以解决问题。