У меня есть функция mergesort, которую я тестирую с помощью JUnit. Ниже один из моих тестов: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
не заботится о порядке элементов (маловероятно), о том, когда я копирование TestArray
в correctArray
, это копирование по ссылке, и, таким образом, вызывая Arrays.sort
на correctArray
сортирует TestArray
также.
Может ли кто-нибудь подтвердить, какая из двух происходит, и каково должно быть решение? Есть ли Assert
, который сохраняет порядок в памяти, или есть способ скопировать массивы по значениям, а не ссылку, не записывая явный цикл?
Ах, спасибо. Я понял, что это была проблема, но не имел понятия о существовании '.clone()'. – xbonez