簡體   English   中英

JUnit Test - ParameterizedTests - 'No implicit conversion of type java.lang.Integer to type [Ljava.lang.Integer;'

[英]JUnit Test - ParameterizedTests - 'No implicit conversion of type java.lang.Integer to type [Ljava.lang.Integer;'

使用 JUnit5。 這對我來說似乎表現不正確,我可能會遺漏一些東西。

    @ParameterizedTest
    @MethodSource
    void testFunc(Integer arr []) {
        for(Integer i : arr){
            System.out.print(i + " ");
        }
        System.out.println("\n");
    }

    static Stream<Arguments> testFunc() {
        return Stream.of(
                Arguments.of(new Integer [] {12, 42, 52, 1234, 12, 425, 4}),
                Arguments.of(new Integer [] {12, 42, 52, 1234, 12, 425}),
                Arguments.of(new Integer [] {12})
        );
    }

產生錯誤:

org.junit.jupiter.api.extension.ParameterResolutionException: Error converting parameter at index 0: No implicit conversion to convert object of type java.lang.Integer to type [Ljava.lang.Integer;

我也嘗試過使用int而不是Integer的上述代碼,但這可以正常工作。

這沒有錯誤:

    public static void main(String args[]){
        test(new Integer []{12, 42, 52, 1234, 12, 425, 4});
    }

    static void test(Integer[] arr) {
        for(Integer a : arr){
            System.out.println(a);
        }
    }

您收到此錯誤,因為Arguments.of()的方法聲明如下:

public static Arguments of(Object... arguments)

Object...表示一個varargs(可變參數)參數,所以寫的時候:

Arguments.of(1, 2, 3)

在編譯時, java 會將其放入數組中:

Arguments.of(new Object[]{1, 2, 3})

您遇到的問題可以通過以下方式顯示:

Integer[] ints = new Integer[]{1, 2, 3};
Object[] objs = ints; // works

所以當你寫:

Arguments.of(new Integer[]{12, 42, 52, 1234, 12, 425, 4})

然后 java 將直接將此數組傳遞給方法,它的行為實際上與以下兩者相同:

Arguments.of(new Object[]{12, 42, 52, 1234, 12, 425, 4})
Arguments.of(12, 42, 52, 1234, 12, 425, 4)

為了克服這個問題,您需要將Integer[]數組直接轉換為Object ,這樣它將被包裝在另一個數組中:

Arguments.of((Object) new Integer[]{12, 42, 52, 1234, 12, 425, 4})

會變成:

Arguments.of(new Object[]{new Integer[]{12, 42, 52, 1234, 12, 425, 4}})

正如您所注意到的,它可以與int[]一起正常工作,因為以下內容不起作用:

int[] ints = new int[]{1, 2, 3};
Object[] objs = ints; // int[] cannot be assigned to Object[]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM