タイトル
TOPJavaテスト → This Page

djUnitの概要~利用方法【カバレッジ - テスト】

前提

このページに記載している内容は2011/03/06に書かれたものです。
掲載している画面や方法が将来的に変更されている場合があります。
また、解説に使っている eclipse のバージョンは 3.6.1 です。
eclipseのバージョンによって若干異なる部分があるかもしれません。
「初心者にも分かる djUnit」を目指して頑張って解説します。

特徴

djUnitの特徴
・コードのテスト網羅率(カバレッジ)を計測できる
・eclipseと連携していて簡単に計測できる
・結果レポートも出力される

カバレッジについての注意点
・カバレッジ計測はあくまでも網羅率を出すにすぎない
・網羅率が高いからと言ってコードやテストの品質が高いとは限らない
・網羅率(カバレッジ)を100%にすることが目的になってしまってはいけない
 ↑結構こういう人は多い気がする。
  目的と手段を間違えてはいけない(本来の目的は品質のはず)

導入方法

まずは以下の公式サイトにいってダウンロードします。
http://works.dgic.co.jp/djwiki/Viewpage.do?pid=@646A556E6974

ダウンロードと書かれている箇所があるので、その下にあるリンクをクリックしてダウンロード用のページに移動します。
図:公式サイト

eclipseのバージョンごとにリンクがあるので、お使いの環境に合わせてダウンロードしましょう。
残念ながら現時点では eclipse 3.6 のファイルがないので、for Eclipse 3.5 をダウンロードしてみます。
ファイル名のリンクをクリックするとダウンロードが開始されます。
図:ダウンロード

次にダウンロードしたファイルを解凍し、eclipse のフォルダにある plugins フォルダに
ディレクトリごとコピーします。
そして eclipse を起動します。

eclipse が起動したら、パッケージ・エクスプローラーでプロジェクトを右クリックし、「プロパティー」を選択します。

「プロパティー」画面に djUnit が追加されていればインストール成功です。
図:プロパティー

利用方法

テスト対象クラスの作成

まずはテスト対象となるクラスを作成します。
今回は以下のような検証用クラスを作ってみました。

ValidatorUtility.java
package com.mitchy_world.djunit.sample;

/**
 * 検証ユーティリティクラス
 */
public class ValidatorUtility {

	/**
	 * ブランクチェック
	 * 
	 * @param value
	 *            値
	 * @return ブランク有無
	 */
	static public boolean isBlank(String value) {
		if (value == null || value.length() == 0) {
			return true;
		}
		return false;
	}

	/**
	 * int値チェック
	 * 
	 * @param value
	 *            文字列
	 * @return int値判定有無
	 */
	static public boolean isInt(String value) {
		if (isBlank(value)) {
			return false;
		}
		try {
			Integer.parseInt(value);
		} catch (NumberFormatException e) {
			return false;
		}
		return true;
	}

}

テスト・クラスの作成

ではテスト・クラスを作ってみましょう。
今回はとりあえずメジャーな JUnit3 で作ってみます。

JUnit(JUnit3)の概要~利用方法を参考にして
・テスト・ソース用フォルダの作成
・テスト・クラスの作成
を行いましょう。

以下、テスト・クラスのサンプルです。
ValidatorUtilityTest.java
package com.mitchy_world.djunit.sample;

import junit.framework.TestCase;

/**
 * @author みっちー
 * 
 */
public class ValidatorUtilityTest extends TestCase {

	/**
	 * @param name
	 */
	public ValidatorUtilityTest(String name) {
		super(name);
	}

	/**
	 * {@link com.mitchy_world.djunit.sample.ValidatorUtility#isBlank(java.lang.String)}
	 * のためのテスト・メソッド。(null)
	 */
	public void testIsBlank_01() {
		System.out.println("testIsBlank_01");
		assertTrue(ValidatorUtility.isBlank(null));
	}

	/**
	 * {@link com.mitchy_world.djunit.sample.ValidatorUtility#isBlank(java.lang.String)}
	 * のためのテスト・メソッド。(空白)
	 */
	public void testIsBlank_02() {
		System.out.println("testIsBlank_02");
		assertTrue(ValidatorUtility.isBlank(""));
	}

	/**
	 * {@link com.mitchy_world.djunit.sample.ValidatorUtility#isBlank(java.lang.String)}
	 * のためのテスト・メソッド。(正常)
	 */
	public void testIsBlank_03() {
		System.out.println("testIsBlank_03");
		assertFalse(ValidatorUtility.isBlank("xxxxx"));
	}

	/**
	 * {@link com.mitchy_world.djunit.sample.ValidatorUtility#isInt(java.lang.String)}
	 * のためのテスト・メソッド。(null)
	 */
	public void testIsInt_01() {
		System.out.println("testIsInt_01");
		assertFalse(ValidatorUtility.isInt(null));
	}

	/**
	 * {@link com.mitchy_world.djunit.sample.ValidatorUtility#isInt(java.lang.String)}
	 * のためのテスト・メソッド。(空白)
	 */
	public void testIsInt_02() {
		System.out.println("testIsInt_02");
		assertFalse(ValidatorUtility.isInt(""));
	}

	/**
	 * {@link com.mitchy_world.djunit.sample.ValidatorUtility#isInt(java.lang.String)}
	 * のためのテスト・メソッド。(正常)
	 */
	public void testIsInt_04() {
		System.out.println("testIsInt_04");
		assertTrue(ValidatorUtility.isInt("123456"));
	}
}

では早速実行してみましょう。
画面左側の「プロジェクト・エクスプローラー」で ValidatorUtilityTest を右クリックしてメニューから「実行」>「djUnitテスト」を選択します。
図:djUnitテスト実行

「JUnit」ビュー、「コンソール」ビュー、「djUnitカバレッジ・レポート」ビューが追加されて実行結果が表示されると思います。
図:djUnitテスト実行結果

「JUnit」ビュー、「コンソール」ビューを確認すると、全て成功していることが分かります。
次に「djUnitカバレッジ・レポート」ビューを確認してみましょう。
図:djUnitカバレッジ・レポート

以下、それぞれのセクションの説明です。
 「カバレッジ・レポート」
  全パッケージ、全クラスのカバレッジの総計です。
  要はサマリです。
 「パッケージ」
  各種パッケージごとのカバレッジ総計です。
 「すべてのファイル」
  各種クラスごとのカバレッジです。

今回はテスト・クラス、パッケージが1つなのでいずれも同じ数値になっています。

それぞれの一覧の見方ですが、「%line」は行の網羅率、「%branch」は分岐の網羅率となっています。

今回は「%line」が70%、「%branch」が100%となっているので
分岐は全て網羅したテストになっているが、行は全てを網羅したテストになっていないという結果になっています。


網羅率を上げるためのテスト・クラスの修正

では、次に網羅率を上げるためにテスト・クラスを修正しましょう。

レポートの「すべてのファイル」から対象のクラス名をクリックしてみて下さい。
該当のクラスがJavaエディタで開くと思います。

すると何やらマークされている行があると思います。
その行のマークをクリックすると「35行目が未実行です。」とツールチップが表示されると思います。
図:djUnitマーク

つまり、作成したテスト・クラスでは該当行を実行するテストが抜けているということになります。
他にもクラス名部分でも同様にマークがされていますが、これはインスタンス作成のテストが抜けているということです。


と、いうことで早速該当行もちゃんと実行されるテスト・クラスに修正しましょう。

テスト・クラスに以下のコードを追加します。
(testValidatorUtility メソッドは超適当ですが許して下さい)
ValidatorUtilityTest.java
	/**
	 * {@link jp.co.junit3.sample.ValidatorUtility#isInt(java.lang.String)}
	 * のためのテスト・メソッド。(数値以外)
	 */
	public void testIsInt_03() {
		System.out.println("testIsInt_03");
		assertFalse(ValidatorUtility.isInt("x"));
	}

	
	/**
	 * {@link com.mitchy_world.djunit.sample.ValidatorUtility()}
	 * のためのテスト・メソッド。
	 */
	public void testValidatorUtility() {
		ValidatorUtility vu = new ValidatorUtility();
		assertNotNull(vu);
	}

追加できたら再度djUnitを実行してみます。

無事に100%になりましたね。
図:djUnitカバレッジ・レポート2


他のクラスやそれのクラスに対するテスト・クラス、テスト・スイートを作ったら
パッケージを選択して djUnit を実行してみましょう。
「すべてのファイル」「パッケージ」などが作成した数だけ追加されていると思います。
図:djUnitカバレッジ・レポート3


冒頭の「特徴」でも述べましたが、
「網羅率が高いからと言ってコードやテストの品質が高いとは限らない」
という点に注意して下さい。

上記サンプルでは網羅率100%ですが、実際には品質を保証するためのテストが足りていません。
(isInt メソッドに int の桁があふれるような値を渡したときにどうなるの?など)

100%にしたとしても、「行や分岐を網羅したにすぎない」ということは肝に銘じておきましょう。

結果のエクスポート

「djUnitカバレッジ・レポート」ビューの右側にあるアイコンの左端にあるアイコンをクリックすると、
図:アイコン
結果を html ファイル形式でエクスポート出力することが可能です。
複数ファイルに出力されるのでフォルダを作成してそこに出力させるようにしましょう。

djUnitの設定

「導入方法」の最後で述べているように、プロジェクトの右クリックから「プロパティー」を選択し、
「プロパティー」画面から「djUnit」を選択させることができます。

ここでは特定のクラスだけを djUnit の対象としたり、逆に特定のクラスを対象外にしたりできます。
例えばテスト・スイートとして AllTests クラスを作ったら、
このクラス自体も djUnit の対象となったりしてしまう場合に
「AllTests クラスを対象外としてしまう」などなど。

ダウンロード

解説で使ったクラスなどを含んだ eclipse 用プロジェクト一式

更新履歴

2011/03/06 新規作成


TOPJavaテスト → This Page