当我将参数与 PowerMockito 模拟静态方法一起使用时,为什么会出现参数类型不匹配?
Why do I get an argument type mismatch when I use arguments with PowerMockito mocked static method?
我正在使用 PowerMockito 来模拟对静态 class 的调用,并且该方法有一个参数,它是一个对象数组。所以调用应该看起来像这样:
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 中给我一个警告:
The argument of type MyObject[] should explicitly be cast to Object[] for the invocation of the varargs method when(Class, String, Object...) from type PowerMockito. It could alternatively be cast to Object for a varargs invocation
But when I cast to an Object like this:
PowerMockito.when(MyClass.class, "doSomething", (Object) objArray1).thenReturn("A String");
执行此方法时我没有返回该字符串,我假设这是因为 Object 类型参数导致无法识别该方法,因为它需要 MyObject 类型的东西作为参数。
关于如何在不强制转换为 Object 的情况下传递非原始类型或如何通过强制转换识别方法的任何想法?
这很正常。您需要选择 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
试试这个
PowerMockito.doReturn("A String").when(MyClass.class, "doSomething", Matchers.anyObject());
我正在使用 PowerMockito 来模拟对静态 class 的调用,并且该方法有一个参数,它是一个对象数组。所以调用应该看起来像这样:
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 中给我一个警告:
The argument of type MyObject[] should explicitly be cast to Object[] for the invocation of the varargs method when(Class, String, Object...) from type PowerMockito. It could alternatively be cast to Object for a varargs invocation But when I cast to an Object like this:
PowerMockito.when(MyClass.class, "doSomething", (Object) objArray1).thenReturn("A String");
执行此方法时我没有返回该字符串,我假设这是因为 Object 类型参数导致无法识别该方法,因为它需要 MyObject 类型的东西作为参数。
关于如何在不强制转换为 Object 的情况下传递非原始类型或如何通过强制转换识别方法的任何想法?
这很正常。您需要选择 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
试试这个
PowerMockito.doReturn("A String").when(MyClass.class, "doSomething", Matchers.anyObject());