使用Mockito:在私有静态方法中匹配多个参数?

时间:2016-08-08 21:08:06

标签: java mockito powermockito

我一直在尝试使用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 个答案:

答案 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,...)可以解决问题。