More Related Content
Similar to 第1回JUnit勉強会ハンズオン (20)
第1回JUnit勉強会ハンズオン
- 9. フェーズ 内容 どこに書くか?
事前準備 (setup)
テスト対象オブジェクト(SUT ※)の初期化
※ System Under Testの略
テストメソッド内、@Before、
@BeforeClass
実行(exercise) テスト対象操作の実行(1度だけ実行) テストメソッド内
検証 (verify) テスト結果の実測値が期待値と等価か検証 テストメソッド内
後処理 (tear down) 次のテスト実行に影響が無いよう後処理する
テストメソッド内、@After
@AfterClass
単体テストは基本的に次の4フェーズで構成されます。
可読性向上のためにどのフェーズを実行しているかコメントを残しましょう!
4フェーズテストについて
- 11. なぜMatcherを利用するのか?
・より自然言語(英語)に近い形で記述できる
【JUnit3】 assertEqual (expected, actual)
【JUnit4∼】 assertThat (actual, is(expected))
JUnit4の方が「actual is expected」というような自然言語に近い読み方ができます。
・オブジェクト検証のバリエーションが広がる
Junit3までは検証方法は予めJUnit3側で用意されたメソッドの種類しか存在しませ
んでした。(AssertEqual、AssertTure等)
Matcherを自作(第四回ハンズオンで解説)することで、
必要に応じて検証方法を追加することができます。
これにより、複雑なテスト検証処理をMatcherに移すことができます。
Junit4でも従来のAssertion(assertEqualsやassertTureなど)も引き続き利用
可能な状態となっています。ただし、これら旧来の検証メソッドは下位互換性のため
に残されているだけのようです。
原則として、今後はasserThatとMatcherの利用をお勧めします。
- 21. ⑥ 主要なJUnitアノテーションと使いどころ
アノテーション 利用例や使いどころ
@Test
テストメソッドであることをJUnitに明示
@Test(expected=HogeException.class) … Exception発生を検証
@Test(timeout=1000) … 実行に1,000ms以上要した場合はテスト失敗扱い
@Before
各テストメソッドの実行前に呼び出されるメソッドを指定
・テストクラス(SUT)のインスタンス化 (SUTはテストクラスのフィールドとして保持)
・DBの初期化(第三回ハンズオンで解説)
など
@After
各テストメソッドの実行後に呼び出されるメソッドを指定
(DB関連の後処理等で利用。@Beforeと比べると利用頻度は低い)
@Ignore
無視するテストケースに指定。
テストメソッドだけ定義して、後から実装を作る、といった場合に有効。
@Rule
従来のテストでは実現できない様々な振る舞いをテストに対して追加する仕組み
ExpectedExceptionルールを利用する事で、@Test(expected)では不足していたExceptionの検証
(MessageやCauseの検証)を実施できる。
- 22. ハンズオン5 - 様々なバリエーションのテスト
以下のケースのテストメソッドを作成してみましょう。
※ 出典:書籍「JUnit実践入門」(一部)
① 副作用を持つメソッドのテスト
Counterクラスのincrementメソッドは呼び出す毎に1ずつ加算された値を返し
ます。このメソッドのテストクラスを作成してみましょう。
なお、初回のincrementメソッド呼び出し時は 1 を返します。
② 複合条件/テストしやすいメソッド設計を要するテスト
FizzBuzzを実行するクラスを作成し、単体テストを作成してみましょう。
引数として整数を渡し、0∼引数までのFizzBuzz結果をそれぞれ標準出力
(System.out)したいです。
どのようなメソッドの設計とすると単体テストしやすいでしょうか?