0

我试图在 SelectionSort 类上理解和实施黑盒/白盒 JUnit 技术,但我无法理解要采取的方向。

我在下面的失败尝试之一..我尝试从我的 SelectionSort 类测试数组的大小,但我的方法(unsortedArray)无法识别..

@Test
public void testUnsortedArray() {
    int n = 20;
    int[] x = new int[n];
    for (int i = 0; i < 20; i++) {
        x[i] = (n);

        n--;
        i++;
    }
    SelectionSort2 a = new SelectionSort2();
    assertArrayEquals(20, a.unsortedArray(x, 20));

}

下面是我提供的 SelectionSort 类。非常感谢任何帮助或指导:)

public class SelectionSort2 {

    public static void main(String[] args)
    {
        int n = 20;
        int[] numArray = unsortedArray(n); // re-initialize 
        printArray(numArray,n);
        selectSort2(numArray, n);
        printArray(numArray, n);
    }


    //Generate data for the selection sort array 
    public static int[] unsortedArray(int n) {
        int[] a = new int[n];
        for (int index = 0; index < n; index++) {
            a[index] = (n - index);
        }
        return a;
    }
    //print the array 
    public static void printArray(int[] data, int n)
    {
        for (int index = 0; index < n; index++) {
            System.out.print(data[index] + " ");
        }
        System.out.println();
    }

    public static void selectSort2(int[] data, int n)
    {
        for (int numUnsorted = n; numUnsorted > 0; numUnsorted--) {
            int maxIndex = 0;
            for (int index = 1; index < numUnsorted; index++) {
                if (data[maxIndex] < data[index])
                    maxIndex = index;
                //swap the element 
                int temp = data[numUnsorted-1];
                data[numUnsorted-1] = data[maxIndex];
                data[maxIndex] = temp;

            }
        }
    }
} 
4

2 回答 2

1

黑盒测试可以被设想为输入输出对。你给你的程序一组输入,看看输出是否符合你的期望。

所以在这种情况下,你会有类似的东西:

input: {5, 3, 1};                 expected output: {1, 3, 5}
input: {9, 7, 5, 6, 8, 34, 3, 6}; expected output: {3, 5, 6, 6, 7, 8, 9, 34}
input: {}                         expected output: {}
input: {1, 3, 5}                  expected output: {1, 3, 5}

你会使用类似的东西assertArrayEquals()来检查程序的输出是否符合你的预期。

白盒测试涉及更多一些,因为您正在设计尝试通过代码执行所有可能路径的测试,这意味着白盒测试往往更加特定于实现。老实说,我对白盒测试不是很熟悉,所以我能帮你的不多。我猜想对此的白盒测试本质上是查看您的代码并寻找可能在执行期间弹出的各种极端情况。不过,您的代码似乎确实很简单,所以我不确定您可能会遇到哪些黑盒测试尚未涵盖的情况...

对于您给出的具体测试,我认为问题出在这一行:

assertArrayEquals(20, a.unsortedArray(x, 20));

assertArrayEquals()要么将两个数组作为参数,要么将一个String和两个数组String作为错误消息。我认为您的代码不会编译,因为您传递的参数都无效。另外,您似乎没有定义unsortedArray(int[], int)方法...您是要这样做selectSort2(x, 20)吗?

修复该行后,JUnit 测试应该可以工作。注释掉一行至少允许 JUnit 测试在我的计算机上运行。

还有一件事——你说你想在 SelectionSort 类中测试数组的大小。为此,assertTrue()可能是要使用的方法,但我不确定这样的测试是否有用,因为数组大小无法更改,并且您在任何时候都不会返回新数组。

于 2014-04-29T04:52:19.090 回答
0

'assertArrayEquals' 方法用于检查 2 个数组。但是您的第一个参数 20 不是可能是失败原因的数组对象。

于 2014-04-29T04:32:58.090 回答