我正在使用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方法(Class,String,Object ...)。也可以将其转换为Object以进行varargs调用 但当我转向像这样的对象时:
PowerMockito.when(MyClass.class, "doSomething", (Object) objArray1).thenReturn("A String");
我没有在执行此方法时返回该字符串,我假设这是因为Object类型参数导致无法识别该方法,因为它期望MyObject类型作为参数。
关于如何在不作为Object转换的情况下传递非基元或如何使用转换来识别方法的任何想法?
答案 0 :(得分:1)
试试这个
PowerMockito.doReturn("A String").when(MyClass.class, "doSomething", Matchers.anyObject());
答案 1 :(得分:0)
这很正常。您需要选择Object... objs
或Object[] 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