『JUnit in Action』読習・実践 Chapter 2:Exploring core JUnit
- 作者: Petar Tahchiev,Felipe Leme,Vincent Massol,Gary Gregory
- 出版社/メーカー: Manning Publications
- 発売日: 2010/08/07
- メディア: ペーパーバック
- クリック: 20回
- この商品を含むブログ (15件) を見る
Chapter1をだいぶ前にこなしてから開店休業状態だったこのシリーズ。Advent Calendar 2011の流れに乗じて再開させつつ、少しでも進捗を上げていこうと思います。
これまでの関連エントリ一覧。
そして以下実践・写経メモ。
2.1 Exploring core JUnit
- テストの基本的な解説、代表的なassertメソッドの説明など。
- Test, Suite, Runnerの定義、役割
2.2 Running parameterized tests
- Parameterizedなテストの実行について。異なる値のパラメータ群を用いてテストを実施。
- テストには以下の要求を満たす必要がある
package junitinaction.chapter02; import static org.junit.Assert.*; import java.util.Arrays; import java.util.Collection; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; @RunWith(value=Parameterized.class) public class ParameterizedTest { private double expected; private double valueOne; private double valueTwo; @Parameters public static Collection<Integer[]> getTestParameters() { return Arrays.asList(new Integer[][] { {2, 1, 1}, // expected, valueOne, valueTwo {3, 2, 1}, // expected, valueOne, valueTwo {4, 3, 1}, // expected, valueOne, valueTwo {17, 8, 9}, // expected, valueOne, valueTwo {0, 0, 0}, // expected, valueOne, valueTwo {-5, -3, -2}, // expected, valueOne, valueTwo }); } /** * コンストラクタ */ public ParameterizedTest( double exptected, double valueOne, double valueTwo) { this.expected = exptected; this.valueOne = valueOne; this.valueTwo = valueTwo; } @Test public void sum() { Calcurator calc = new Calcurator(); assertEquals(expected, calc.add(valueOne, valueTwo), 0); } }
- ParameterizedクラスはJUnitのテストランナーの1つ。
- テストランナーを使う事でテストをどの様に実施するべきかを把握することが出来る。他にもみてみよう。
2.3 JUnit test runners
- Test Runner群の紹介。
- テスト実行時のテストランナーを明示したい場合は@RunWithアノテーションを用いる。
- The JUnitCore façadeの説明。
- Custom test runners
- 独自のテストランナークラスを拡張することが出来る。
- 詳細は書籍の[appendix B]を参照。
2.4 Composing tests with a suite
- テストをスイートクラスにまとめる方法。
- Suiteを使って、複数のテストクラスをまとめて実行する事が出来る。
package junitinaction.chapter02; import org.junit.runner.RunWith; import org.junit.runners.Suite; import org.junit.runners.Suite.SuiteClasses; @RunWith(Suite.class) @SuiteClasses(value={ CalcuratorTest.class, ParameterizedTest.class }) public class Chapter02TestSuite { }
- @SuiteClassesアノテーションを用い、実行させたいクラスを追記。
- 階層構造的な使い方も可能。
[...] public class TestCaseA { @Test public void testA1() { // omitted } } [...] public class TestCaseB { @Test public void testB1() { // omitted } } [...] @RunWith(value=Suite.class) @SuiteClasses(value = {TestCaseA.class}) public class TestSuiteA { } [...] @RunWith(value=Suite.class) @SuiteClasses(value = {TestCaseB.class}) public class TestSuiteB { } [...] @RunWith(value = Suite.class) @SuiteClasses(value = {TestSuiteA.class, TestSuiteB.class}) public class MasterTestSuite{ }
書籍の始めの方ってのもあるのかも知れないが、小一時間で終了。このスピード感を以て今後も進めていきたいところです。