当JUnit断言数组不相等时,它们是相等的

xbo*_*nez 3 java arrays junit

我有一个mergesort函数,我正在使用JUnit进行测试.以下是我的一个测试用例:

@Test
    //test using randomly generated numbers
    public void MergeSortTest002()
    {
        long seed = System.currentTimeMillis();
        Random rng = new Random(seed);
        Integer[] TestArray = new Integer[1000];
        int MAX_VALUE = Integer.MAX_VALUE;

        for(int i=0; i<1000; i++) {
            //this will generate positive and negative numbers from
            // -MAX_VALUE/2 to +MAX_VALUE/2
            Integer newNum = rng.nextInt(MAX_VALUE/2) - MAX_VALUE;
            TestArray[i] = newNum;
        }

        Integer[] correctArray = TestArray;
        Arrays.sort(correctArray);
        MergeSort.mergeSort(TestArray);

        Assert.assertArrayEquals(correctArray,TestArray);
    }
Run Code Online (Sandbox Code Playgroud)

奇怪的是,即使我注释掉我称之为mergeSort函数的行,测试仍然通过.

我想两件事情之一是发生:要么assertArrayEquals不关心的元素(不太可能)的顺序,当我抄袭TestArraycorrectArray,它引用的复制,因此呼吁Arrays.sortcorrectArray被分拣TestArray为好.

任何人都可以确认这两者中的哪一个正在发生,应该是什么解决方案?有没有一个Assert记住秩序,或者有没有办法按值而不是引用复制数组而不编写显式的for循环?

NPE*_*NPE 8

问题就在这里:

Integer[] correctArray = TestArray;
Run Code Online (Sandbox Code Playgroud)

您正在复制对数组的引用,而不是数组的内容.

要修复,请将该行更改为:

Integer[] correctArray = TestArray.clone();
Run Code Online (Sandbox Code Playgroud)