1

我正在使用 PowerMockito 模拟对静态类的调用,并且该方法的参数是对象数组。所以调用应该是这样的:

String temp = MyClass.doSomething(MyObject[] objArray1);

但是当我尝试像这样使用 PowerMockito 进行模拟时:

@RunWith(PowerMockRunner.class)
@PrepareForTest(MyClass.class)
public class TestClass {

@Test
public void myTest {
    MyObject[] myObjArray1 = new MyObject[1];
    myObjArray1[0] = new MyObject();

    PowerMockito.mockStatic(MyClass.class);
    PowerMockito.when(MyClass.class, "doSomething", myObjArray1).thenReturn("A String");

    ...
}

这在 Eclipse 中给了我一个警告:

MyObject[] 类型的参数应显式转换为 Object[] 以调用 PowerMockito 类型的 varargs 方法 when(Class, String, Object...)。也可以将其转换为 Object 以进行 varargs 调用但是当我像这样转换为 Object 时:

PowerMockito.when(MyClass.class, "doSomething", (Object) objArray1).thenReturn("A String");

执行此方法时我没有返回该字符串,我假设这是因为 Object 类型参数导致该方法无法被识别,因为它期望 MyObject 类型的东西作为参数。

关于如何在不强制转换为 Object 的情况下传递非原始数据或如何通过强制转换识别方法的任何想法?

4

2 回答 2

1

尝试这个

PowerMockito.doReturn("A String").when(MyClass.class, "doSomething", Matchers.anyObject());

于 2015-07-30T05:17:16.543 回答
0

这个是正常的。您需要选择Object... objsObject[] objs

例子...

public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {

        String[] inputs = {" ", " ", " "};

        method((Object) inputs);
        method((Object[]) inputs);

    }

    static void method(Object... obj) {
        System.out.println("obj.length = " + obj.length);
    }

}

这印..

obj.length = 1   
obj.length = 3
于 2015-07-29T17:05:23.763 回答