ランダムな整数を含むランダムなサイズの配列を毎回作成することになっているJUnitを作成しています。その後、配列のコピーが作成され、元の配列がパラメーターとしてマージソート配列に入力され、配列のコピーがArrays.sort()
メソッドでソートされている間にソートされます。次に、2 つの配列を比較して、それらが同じかどうかを確認します。
コードは次のとおりです。
import java.util.Arrays;
import java.util.Random;
import static org.junit.Assert.assertArrayEquals;
import org.junit.Before;
import org.junit.Test;
public class Mergesort_3wayTest {
private int[] toSort;
private static int SIZE;
private static int MAX;
private static int tests = 20000;
@Before
public void setUp() throws Exception {
Random generator = new Random();
SIZE = generator.nextInt(30) + 1;
MAX = generator.nextInt(30) + 1;
toSort = new int[SIZE];
for (int i = 0; i < toSort.length; i++) {
toSort[i] = generator.nextInt(MAX);
}
}
@Test
public void itWorksRepeatably() {
for (int i = 0; i < tests; i++) {
System.out.println("1 - " + Arrays.toString(toSort));
int[] sorted = new int[toSort.length];
System.arraycopy(toSort, 0, sorted, 0, toSort.length);
Arrays.sort(sorted);
Mergesort_3way.mergesort(toSort);
System.out.println("2 - " + Arrays.toString(toSort));
assertArrayEquals(toSort, sorted);
}
}
}
挿入した から、println
1 つの配列のみが作成され、その 1 つの配列を常にチェックするテストが実行されていることがはっきりとわかりましたが、明らかにそうではないランダムな配列が毎回作成されると思いました。
だから私の質問は、実行するたびassertArrayEquals(toSort, sorted)
に最初からやり直すと推測した配列が1つだけ作成されるのはなぜですか。
グローバル変数と関係があると思いますが、よくわかりません...