簡體   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