限界値分析してJUnitテスト
こんにちは。「Javaを復習する初心者」です。今回はJUnitを使ってみました。
JUnitはJavaのフレームワークのひとつです。テストケースを作成することで、ユニットテストを自動がすることができます。
Contents
テストするクラス
テストするクラスは以下です。
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
-
- end <= startの場合、IllegalArgumentExceptionをスローします。
- それ以外の場合、引数を同名のフィールドに格納します。
- 以下のメソッドを持ちます。
- 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テストをクリックするとテストが実行されます。
全てのテストに合格すると緑色のラインが表示されます。
コンストラクタでは例外が発生するパターンがあります。これをチェックするには以下のように記述します。
@Test(expected = IllegalArgumentException.class) public void testContains5() { new OpenInterval(1, 0); }
上記のように@Test(expected = [発生する例外クラス])という記述をします。