2011年10月19日水曜日

[JUnit][動作確認]JUnit4動作確認テスト

eclipseを起動し、Javaプロジェクトを作成する。
ここでは動作確認のためのプロジェクト名をTarget、テスト対象のクラスをTargetClassとした。
なお、TargetClassはmodelパッケージの配下とした。(パッケージは作らなくてもよい、便宜上のもの)

テスト用のプロジェクトを、Javaプロジェクトとして作成する。
ここではプロジェクト名をTargetTestとした。
TargetTestプロジェクトにmodel.junit.testパッケージを追加し、その配下にTargetClassTestクラスを追加する。
(ここでもパッケージは作らなくてもよい、便宜上のもの)

パッケージエクスプローラ上でTargetTestプロジェクトを右クリックするとメニューが出る。
ここで出るメニューから、[ビルドパス]-[ビルドパスの構成]を選択する。

[ライブラリ]タグを選択し、[ライブラリの追加]ボタンを押下する。
JUnitを選択し[次へ]。
次の画面では[JUnit4]を選択する。

同じく[ビルドパスの構成]を選んで出てくる画面で、[プロジェクト]タグを選択し、[追加]ボタンを押下する。
[Target]にチェックを入れ、[OK]ボタンを押下する。(このTargetは先に作ったプロジェクトのこと)

TargetClassのソースファイルを開き、以下のメソッドを追加。

public void exec(String[] args) {

  // ひとまず中身は空でよい
}

TargetClassTestクラスのソースファイルを開き、次のimportステートメントを追加。

import static org.junit.Assert.*;
import org.junit.Test;
import model.TargetClass;

さらに、次のテストメソッドを追加。

@Test
public void testExec() {

  try {
    TargetClass tc = new TargetClass();
    tc.exec(null);
  }

  catch (Exception e) {
    fail();
  }
}

パッケージエクスプローラ上でTargetClassTestを右クリックするとメニューが出る。
このメニューから[実行]-[JUnitテスト]を実行し、1/1成功の表示が出れば動作確認完了。
ひとまずこれで、JUnitを動作させる環境が整ったことになる。

迅速なテストを行うため、JUnitのテストはオブジェクト指向分析でいうところのモデル部分のみを対象とすることが望ましい。
たとえば作成したモデル部分のロジックが、リッチクライアントアプリケーション上から使われても、Webアプリケーションから使われても、結果は同じはずである。(モデルとしての動作は、ビューに影響を受けない)

自動テスト対象はモデル部分に限定する、というのが私の個人的な意見である。
ツールが発達してWebアプリなども自動でテストできるようだが、原則は「不変」であるはずのモデルのロジックのみとしたいところ。
標準出力へのprintといった動作も原則NG。
代わりにlog4jなどを使ったロギングで動作状況を把握する、というJUnit以外のトレース手段も本番環境としては用意すべきだと思う。

とはいえ、これは頭が固い人間の意見で、却って効率を落とすことがあるかもしれない。
プロジェクトごとに最善の方法を探っていくべきである。

1 件のコメント:

  1. おはようございます。

    実にバリエーション豊かに様々なプロジェクト、ありますよね。

    返信削除