Java 为什么在PowerMockito mocked静态方法中使用参数时会出现参数类型不匹配?
我使用PowerMockito模拟对静态类的调用,该方法有一个作为对象数组的参数。因此,电话应该是这样的:Java 为什么在PowerMockito mocked静态方法中使用参数时会出现参数类型不匹配?,java,unit-testing,casting,powermock,powermockito,Java,Unit Testing,Casting,Powermock,Powermockito,我使用PowerMockito模拟对静态类的调用,该方法有一个作为对象数组的参数。因此,电话应该是这样的: String temp = MyClass.doSomething(MyObject[] objArray1); @RunWith(PowerMockRunner.class) @PrepareForTest(MyClass.class) public class TestClass { @Test public void myTest { MyObject[] myObjAr
String temp = MyClass.doSomething(MyObject[] objArray1);
@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");
...
}
但是当我试着用PowerMockito这样嘲笑的时候:
String temp = MyClass.doSomething(MyObject[] objArray1);
@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中给了我一个警告:
当(类、字符串、对象…)来自PowerMockito类型时,MyObject[]类型的参数应显式转换为Object[],以便调用varargs方法。也可以将其强制转换为对象以进行varargs调用
但当我向这样一个物体投射时:
String temp = MyClass.doSomething(MyObject[] objArray1);
@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");
...
}
当这个方法执行时,我没有返回那个字符串,我假设这是因为对象类型参数导致该方法无法识别,因为它期望MyObject类型的东西作为参数
关于如何在不将强制转换为对象的情况下传递非基本体,或者如何通过强制转换识别方法,有什么想法吗?这是正常的。您需要选择
对象。。。objs
或对象[]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(“字符串”).when(MyClass.class,“doSomething”,Matchers.anyObject())代码>它真的是字符串temp=MyClass.doSomething(Object[]objArray1)代码>?不,该方法在一个静态类中,其实际定义如下:公共静态字符串doSomething(MyObject[]objArray){…}转换只需要编译TestClass,以便调用
时正确的方法签名;它不会更改参数本身的类型。问题可能出在doSomething
中。MyClass.doSomething
的签名是什么?我只是在模仿MyClass方法,所以它实际上没有在doSomething()中执行任何代码。它不只是认识到当使用MyObject[]类型的参数调用MyClass.doSomething时,然后返回“字符串”吗?