JUnit参数化@BeforeAll

时间:2018-07-22 08:30:47

标签: unit-testing testing junit junit5

我是JUnit的初学者,在学习它时遇到了问题。我进行了很多搜索,但仍然找不到答案。

我正在使用的JUnit Jupiter版本是5.3.0-M1。


我正在对某些排序算法进行测试。我想测试它们是否正确,以及在不同长度的不同阵列上的性能。这是我的解决方法。

@BeforeAll
生成一个随机的未排序数组,例如source和一个已排序的target数组。

@BeforeEach
将未排序的source复制到新数组中,作为inputs准备进行测试。

每个@Test方法对inputs数组进行排序并将其与target进行比较,因此我知道它是否正确,IDE会告诉我它花费了多少时间。


问题是:我每次必须手动更改length,然后再次进行测试。

我想知道是否有一种方法可以设置测试,因此它将针对我设置的每个不同长度进行测试。
例如,将[16,32,64,...]之类的数组作为我要测试的不同长度传递。

我知道我可以将参数传递给@Test方法,但是随后我必须在每个@Test中多次生成sourcetarget

(对不起,我的英语不好,我希望我已经足够清楚地解释了这个问题。)

这是我的测试班级:

class SortingTest {

    static int length = 512;    // manually change every time.
//  static int length = 1024;
//  static int length = 2048;
//  static int length = 4096;

    static int[] source;
    static int[] target;
    static int[] inputs;

    @BeforeAll
    static void beforeAllSort() {
        source = MintArray.generateIntArray(length);
        target = new int[length];
        inputs = new int[length];
        System.arraycopy(source, 0, target, 0, source.length);
        Arrays.sort(target);
        System.out.println("[SORT] Array Length : [" + length + "]");
        System.out.println("[SORT] Source Array : " + Arrays.toString(source));
        System.out.println("[SORT] Target Array : " + Arrays.toString(target));
    }

    @BeforeEach
    void beforeEachSort() {
        System.arraycopy(source, 0, inputs, 0, source.length);
        System.out.println();
    }

    @Test
    @DisplayName("Bubble Sort")
    void bubbleSort() {
        System.out.println("[SORT] Bubble Sort");
        inputs = new BubbleSort().bubbleSort(inputs);
        assertArrayEquals(inputs, target);
    }

    @Test
    @DisplayName("Insertion Sort")
    void insertionSort() {
        System.out.println("[SORT] Insertion Sort");
        inputs = new InsertionSort().insertionSort(inputs);
        assertArrayEquals(inputs, target);
    }

    @Test
    .......more sort
}

0 个答案:

没有答案