繁体   English   中英

将参数与PowerMockito模拟静态方法一起使用时,为什么参数类型不匹配?

[英]Why do I get an argument type mismatch when I use arguments with PowerMockito mocked static method?

我正在使用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类型调用when(Class,String,Object ...)的varargs方法。 也可以将其强制转换为Object以进行varargs调用,但是当我强制转换为这样的Object时:

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

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

关于如何在不强制转换为Object的情况下传递非基本类型或如何让强制转换识别方法的任何想法?

尝试这个

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

这很正常。 您需要选择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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM