0

SelectionSort クラスでブラックボックス/ホワイトボックス JUnit 手法を理解し実装しようとしていますが、どの方向に進むべきかを理解するのに苦労しています..

以下の失敗した試みの1つ..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()引数として 2 つの配列を受け取るか、エラー メッセージとして機能するStringと 2つの配列を受け取ります。Stringあなたが渡す引数のどちらも有効ではないので、あなたのコードはコンパイルされないと思います。さらに、あなたはunsortedArray(int[], int)メソッドを定義しているようには見えません... するつもりでしたselectSort2(x, 20)か?

その行を修正すると、JUnit テストが機能するはずです。その 1 行をコメントアウトすることで、少なくとも私のコンピューターで JUnit テストを実行できるようになりました。

もう 1 つ -- あなたは、SelectionSort クラスで配列のサイズをテストしたいと言いました。そのためには、assertTrue()使用する方法かもしれませんが、配列のサイズを変更することはできず、どの時点でも新しい配列を返さないため、そのようなテストが役立つかどうかはわかりません。

于 2014-04-29T04:52:19.090 に答える
0

'assertArrayEquals' メソッドは、2 つの配列をチェックするために使用されます。しかし、最初の引数 20 は、失敗の原因となる可能性のある配列オブジェクトではありません。

于 2014-04-29T04:32:58.090 に答える