0

我做了一个合并排序,它将一个数组合并为 3 个部分而不是两个部分,以便对其进行排序,并且我编写了一些代码来测试我的合并排序是否正常工作。这是测试的代码:

while (true){

    Random rand = new Random();

    int[] randArray = new int[rand.nextInt(2000)];

    for (int i = 0; i < randArray.length; i++) {
        randArray[i] = rand.nextInt();
    }

    int[] temporary = new int[randArray.length];

    System.arraycopy(randArray, 0, temporary, 0, randArray.length);

    mergesort(randArray);

    Arrays.sort(temporary);

    if (Arrays.equals(randArray, temporary)){
        System.out.println("YES");
    } else {
       break;
    }

    }       
}

我正在做的是每次创建一个最多包含 2000 个整数的数组并用随机整数填充数组,然后将该数组存储在临时数组中,然后在原始数组中使用我的合并排序并使用Arrays.sort()临时数组的方法,然后如果两个数组相等,则打印 YES 或者从 while 循环中中断。

到目前为止,它还没有从 while 循环中中断并表明我的算法是正确的,所以我问我是否在这里正确并正确编写了测试代码。

编辑:它不断打印 YES 而不会中断循环,所以我相信它正在工作,但我在问,所以我可以确定

4

1 回答 1

0

你的测试代码对我来说似乎很好,这意味着你的算法也很好。另一方面,请不要误会我的意思,但是这种测试只能被认为是一种快速而肮脏的检查。如果要进行适当的测试,则应测试以下内容:

  • 简单示例的快乐路径
  • 边界条件
  • 错误条件

您还应该考虑使用像 JUnit 这样的自动化测试框架。

最后,在测试中使用随机输入并不是一个好习惯,因为测试的结果可能会随着运行而变化。

于 2012-05-21T19:48:18.440 回答