こんにちは。ハンドルネーム「Javaを復習する初心者」です。このサイトはプログラミング言語Javaの復習・学習をするブログです。プログラムの開発・実行はEclipseで行ってます。
スポンサーリンク
お知らせ
  • 参考文献のページ作りました。
  • Amazon.co.jpアソシエイトに参加していますが、参考文献の紹介はもしもアフィリエイトに統一しました。
  • 2016年10月9日からは投稿ペースを落とします。週1回くらいにする予定です。
スポンサーリンク

限界値分析してJUnitテスト

こんにちは。「Javaを復習する初心者」です。今回はJUnitを使ってみました。

JUnitはJavaのフレームワークのひとつです。テストケースを作成することで、ユニットテストを自動がすることができます。

テストするクラス

テストするクラスは以下です。

public class OpenInterval {

    private double start;
    private double end;

    public OpenInterval(double start, double end) throws IllegalArgumentException {

        if (end <= start) {
            throw new IllegalArgumentException(
                    String.format("引数はstart < endである必要があります。start: %d, end: %d", start, end));
        }

        this.start = start;
        this.end = end;
    }

    public boolean contains(double x) {

        return start < x && x < end;

    }

}

このクラスは数直線上の開区間(境界を含まない区間)を表します。以下の構成になってます。

  • 以下のフィールドを持ちます。
    修飾子と型 名前 用途
    private double start start 区間の左端の座標
    private double end end 区間の右端の座標
  • 以下のコンストラクタを持ちます。
    public OpenInterval(double start, double end) throws IllegalArgumentException
    1. end <= startの場合、IllegalArgumentExceptionをスローします。
    2. それ以外の場合、引数を同名のフィールドに格納します。
  • 以下のメソッドを持ちます。
    public boolean contains(int x)
    xが区間に含まれる場合、trueを返します。それ以外の場合、falseを返します。

メソッドのみテスト

メソッドのみテストすることにします。

単体テストは次の2つの観点があります。

種類 着目する箇所
ホワイトボックステスト 内部構造
ブラックボックステスト 入力と出力

今回はブラックボックステストの観点でテストすることにします。

インスタンスを「new OpenInterval(0, 1)」で生成して、このインスタンスに対してcontains()メソッドを呼び出し、テストを行うことにします。限界値分析という手法を参考にすると以下のテストケースが適切のようです。

case xの値 期待値
No. 1 0.0 false
No. 2 0.1 true
No. 3 0.9 tru
No. 4 1.0 false

上記の通りにテストケースは以下のようにしました。

public class OpenIntervalTest {

    private OpenInterval openInterval = new OpenInterval(0, 1);

    @Test
    public void testContains1() {
        assertThat(openInterval.contains(0.0), is(false));
    }

    @Test
    public void testContains2() {
        assertThat(openInterval.contains(0.1), is(true));
    }

    @Test
    public void testContains3() {
        assertThat(openInterval.contains(0.9), is(true));
    }

    @Test
    public void testContains4() {
        assertThat(openInterval.contains(1.0), is(false));
    }

}

このjavaファイルを右クリック->実行->jUnitテストをクリックするとテストが実行されます。

passed

全てのテストに合格すると緑色のラインが表示されます。

コンストラクタでは例外が発生するパターンがあります。これをチェックするには以下のように記述します。

    @Test(expected = IllegalArgumentException.class)
    public void testContains5() {
        new OpenInterval(1, 0);
    }

上記のように@Test(expected = [発生する例外クラス])という記述をします。