2012-05-23 45 views
3

我有一個使用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); 
    } 

奇怪的是,即使我註釋掉,我打電話給我的mergeSort功能線,測試仍然通過。

我想通一兩件事情正在發生:要麼assertArrayEquals不關心的元素(不太可能),當我複製TestArraycorrectArray的順序,這是複製的參考,從而對correctArray調用Arrays.sort是排序還有TestArray

任何人都可以確認兩者中哪一個正在發生,應該是什麼解決方案?有沒有Assert記住順序,或者有沒有一種方法可以通過值而不是引用來複制數組,而無需編寫明確的for循環?

回答

8

的問題就在這裏:

Integer[] correctArray = TestArray; 

你複製參考你的陣列,而不是內容的陣列的

要修正,更改該行:

Integer[] correctArray = TestArray.clone(); 
+0

啊,謝謝。我認爲這是問題,但不知道'.clone()'的存在。 – xbonez