Java JUnit测试创建相同的数组而不是随机数组

Java JUnit测试创建相同的数组而不是随机数组,java,testing,junit,global-variables,mergesort,Java,Testing,Junit,Global Variables,Mergesort,我正在创建一个JUnit,它应该每次生成一个包含随机整数的随机大小数组。然后制作数组的副本,原始数组作为参数输入到我的mergesort数组中并进行排序,而数组的副本使用Arrays.sort()方法进行排序。然后比较这两个数组,看它们是否相同 代码如下: import java.util.Arrays; import java.util.Random; import static org.junit.Assert.assertArrayEquals; import org.junit.Befo

我正在创建一个JUnit,它应该每次生成一个包含随机整数的随机大小数组。然后制作数组的副本,原始数组作为参数输入到我的mergesort数组中并进行排序,而数组的副本使用
Arrays.sort()方法进行排序。然后比较这两个数组,看它们是否相同

代码如下:

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);
        }
    }
}
导入java.util.array;
导入java.util.Random;
导入静态org.junit.Assert.assertArrayEquals;
导入org.junit.Before;
导入org.junit.Test;
公共类合并排序\u 3wayTest{
私有int[]toSort;
私有静态整数大小;
私有静态int MAX;
专用静态int测试=20000;
@以前
public void setUp()引发异常{
随机生成器=新随机();
尺寸=发电机。nextInt(30)+1;
最大值=发电机下一个(30)+1;
toSort=新整数[大小];
for(int i=0;i
我可以从我插入的
println
中清楚地看到,只创建了一个数组,并且测试一直在运行,检查一个数组,但我认为它每次都会创建一个随机数组,这显然不是事实

所以我的问题是,为什么每次运行
assertarayequals(toSort,sorted)
时都只创建一个数组,我猜它会重新开始

我相信这与全局变量有关,但我不太确定…

您正在测试方法中循环。setup方法将在测试方法之前调用一次,但不会在每次循环迭代开始时自动运行。你会怎么想

每次从头开始运行测试时,它都应该创建一个不同的随机数组,但是该测试运行中的20000次迭代都将处理同一个数组,因为没有什么可以重新创建它。如果您希望在测试方法中发生某些事情,您需要自己编写。

您正在测试方法中循环。setup方法将在测试方法之前调用一次,但不会在每次循环迭代开始时自动运行。你会怎么想


每次从头开始运行测试时,它都应该创建一个不同的随机数组,但是该测试运行中的20000次迭代都将处理同一个数组,因为没有什么可以重新创建它。如果您希望在测试方法中发生某些事情,您需要自己编写。

我不完全确定是否理解。。。但是在JUnit中,@Before方法在每个@Test方法之前执行一次。如果在@Test方法中循环,则不会调用@Before。由于@Before方法是使用随机值重新初始化数组的方法,因此每个测试只创建一次


此外,您无法通过Arrays.toString()确定数组的创建,这仅仅是因为具有相同元素的两个数组将显示相同的内容,即使它们是两个单独的数组。

我不完全清楚。。。但是在JUnit中,@Before方法在每个@Test方法之前执行一次。如果在@Test方法中循环,则不会调用@Before。由于@Before方法是使用随机值重新初始化数组的方法,因此每个测试只创建一次


此外,您无法通过Arrays.toString()确定数组的创建,因为具有相同元素的两个数组将显示相同的内容,即使它们是两个单独的数组。

toSort数组只填充一次。在setUp()方法中,在itWorksRepeatably方法之前只执行一次。 因此,itWorksRepeatably方法使用相同的数组“测试”,即20000次


您需要移动生成数组的逻辑(即itWorksRepeatably方法中for循环内的setUp方法中的代码),以便每次看到不同的数组。

toSort数组只填充一次。在setUp()方法中,在itWorksRepeatably方法之前只执行一次。 因此,itWorksRepeatably方法使用相同的数组“测试”,即20000次


您需要移动生成阵列的逻辑(即ITWorksRepeatedly方法中for循环内的setUp方法中的代码,用于每次查看不同的数组。

如果希望此代码按预期方式运行,请在
setUp
函数中获取代码,并将其转换为新的私有方法,在每个循环开始时调用,如下所示:

private void magic()
{
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);
        }

}
private void magic()
{
随机生成器=新随机();
尺寸=发电机。nextInt(30)+1;
最大值=发电机下一个(30)+1;
toSort=新整数[大小];
for(int i=0;i
其次是:

@Test
    public void itWorksRepeatably() {
        for (int i = 0; i < tests; i++) {
           magic();  
           //rest of code  
}
}
@测试
可重复使用的公共文件(){
对于(int i=0;i
如果希望此代码按预期方式运行,请在
设置
函数中获取代码,并将其转换为新的私有方法,在每个循环开始时调用,如下所示:

private void magic()
{
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);
        }

}
private void magic()
{
随机生成器=新随机();
尺寸=发电机。nextInt(30)+1;
最大值=发电机下一个(30)+1;
托索=