JUnit 実践入門 体系的に学ぶユニットテストの技法 - 第1章 JUni tチュートリアル

第1章 JUnitチュートリアル

1.3 JUnitテストを始めよう

  • "junit-tutorial" プロジェクトを作成
  • JUnit の JAR ファイルを追加
    • [JAR ファイルをプロジェクトにコピペ] -> [(右クリックから)Build Path] -> [Add to Build Path]
  • "Calculator" クラス作成
    • Package: junit.tutorial
  • テストクラス作成
  • テストクラス JUnitテスト実施 -> 未実装につき失敗

1.4 テストコードの記述

  • JUnit テストコードのルール
    • テストクラスは public クラス
    • テストメソッドは、org.junit.Test アノテーションを付与した、public メソッドてする
    • テストメソッドは、戻り値が void であり、引数を持たない
    • throw 句は自由に定義可能
  • 日本語メソッド名でわかりやすくする
    • Javadoc にもメソッドの一覧は出力されるので、テスト項目の一覧として閲覧できる
    • テストクラスのアウトラインを参照すれば、テストクラスで実施しているテストが簡単に把握できる
    • テスト失敗時のレポートも、より理解しやすくなる
      • 句読点使用不可
      • 先頭文字として数字を使用不可
  • ユニットテストは、「あるテスト対象クラスのメソッドを実行した時に、戻り値などで取得された実際の値と、期待される値が一致する(しない)はずである」という宣言で構成される
    • 値を比較検証する宣言のことを、アサーションという
    • JUnit では、org.junit.Assert クラスの、assertThat メソッドを使用する
    • Java に組み込まれている assert とは別物なので注意
  • ユニットテストを作り、具体的な値を当てはめることで、プログラムの潜在的な問題を見つけられる
  • テスト対象クラスが完璧に設計されていることを前提とせずに、「何を検証すべきか?」を強く意識する
  • このような考え方を強く意識する開発手法をテスト駆動開発と呼ぶ

プロダクションコード

package junit.tutorial;

public class Calculator {
    public int multiply(int x, int y) {
        return x * y;
    }
    public float divide(int x, int y) {
        if (y == 0) {
            throw new IllegalArgumentException("divide by zero");
        }
        return (float) x/ (float) y;
    }
}

テストコード

package junit.tutorial;

import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;
import org.junit.Test;

public class CalculatorTest {

    @Test
    public void multiplyで3と4の乗算結果が取得できる() {
        Calculator calc = new Calculator();
        int expected = 12;
        int actual = calc.multiply(3, 4);
        assertThat(actual, is(expected));
    }

    @Test
    public void multiplyで5と7の乗算結果が取得できる() {
        Calculator calc = new Calculator();
        int expected = 35;
        int actual = calc.multiply(5, 7);
        assertThat(actual, is(expected));
    }

    @Test
    public void divideで3と2の除算結果が取得できる() {
        Calculator calc = new Calculator();
        float expected = 1.5f;
        float actual = calc.divide(3, 2);
        assertThat(actual, is(expected));
    }

    @Test(expected = IllegalArgumentException.class)
    public void divideで5と0のときIlegalArgumentExceptionを送出する() {
        Calculator calc = new Calculator();
        float actual = calc.divide(5, 0);
    }
}

JUnit実践入門 ~体系的に学ぶユニットテストの技法 (WEB+DB PRESS plus)

JUnit実践入門 ~体系的に学ぶユニットテストの技法 (WEB+DB PRESS plus)