JUnit 実践入門 体系的に学ぶユニットテストの技法 - 第8章 パラメータ化テスト テストケースとテストデータの分離
第8章 パラメータ化テスト テストケースとテストデータの分離
- 異なる入力値について似たようなテストを実施する場合など、テストケース毎の差異が入力値と期待値だけ、のような状況下において、入力値と期待値をパラメータとして外部化することで見通しを良くする
8.1 テストデータの選択
- 同値クラス
- 組み合わせによるテストデータ選択
- 「プログラムに混入する不具合のほとんどは、単項目に関連する不具合」
- よって「条件をすべて満たす、あるいは1つだけ満たさない」でテストデータを選択すると幸せ
- すべて満たす → true返すはずが、条件1つバグってるの検知できる
- 1つだけ満たさない → false返すはずが、条件1つバグってるの検知できる
- 境界値も組み合わせるとよりイイね
8.2 入力値と期待値のパラメータ化
- テストデータの組み合わせによりテストコードが冗長化するのを防ぐ、パラメータ化テスト parameterized test
- テストデータとテストメソッドを分割する
Theories - パラメータ化テストのテストランナー
- @RunWith でテストクラスに付与する
@Theory - テストメソッドに指定するアノテーション
- @Test の代わり
- 任意の引数を宣言できる
@DataPoint - パラメータを指定するアノテーション
- パラメータは static かつ public なフイールドで定義する
package ch08; import org.junit.experimental.theories.DataPoint; import org.junit.experimental.theories.Theories; import org.junit.experimental.theories.Theory; import org.junit.runner.RunWith; @RunWith(Theories.class) public class ParameterizedTest { @DataPoint public static int INT_PARAM_1 = 3; @DataPoint public static int INT_PARAM_2 = 4; public ParameterizedTest() { System.out.println("初期化"); } @Theory public void 引数を持つテストメソッド(int param) throws Exception { System.out.println("引数を持つテストメソッド (" + param + ")"); } }
初期化
引数を持つテストメソッド (3)
初期化
引数を持つテストメソッド (4)
- @DataPoint 指定した値が渡さている
- 「初期化」が二回出てきてる → コンストラクタが二回呼ばれてる
- 都度都度オブジェクトが生成されている
package ch08; import org.junit.experimental.runners.Enclosed; import org.junit.experimental.theories.DataPoint; import org.junit.experimental.theories.Theories; import org.junit.experimental.theories.Theory; import org.junit.runner.RunWith; @RunWith(Enclosed.class) public class EnclosedParameterizedTypeTest { @RunWith(Theories.class) public static class intのパラメータ化テスト { @DataPoint public static int INT_PARAM_1 = 3; @DataPoint public static int INT_PARAM_2 = 4; @Theory public void 引数がint型のテストメソッド(int param) throws Exception{ System.out.println("引数がint型のテストメソッド (" + param + ")"); } } @RunWith(Theories.class) public static class Stringのパラメータ化テスト{ @DataPoint public static String STRING_PARAM_1 = "Hello"; @DataPoint public static String STRING_PARAM_2 = "World!"; @Theory public void 引数がString型のテストメソッド(String param) throws Exception { System.out.println("引数がString型のテストメソッド (" + "param" + ")"); } } }
引数がString型のテストメソッド (param)
引数がString型のテストメソッド (param)
引数がint型のテストメソッド (3)
引数がint型のテストメソッド (4)
JUnit実践入門 ~体系的に学ぶユニットテストの技法 (WEB+DB PRESS plus)
- 作者: 渡辺修司
- 出版社/メーカー: 技術評論社
- 発売日: 2012/11/21
- メディア: 単行本(ソフトカバー)
- 購入: 14人 クリック: 273回
- この商品を含むブログ (65件) を見る