[Annotations][TestNG]アノテーションを使用した簡単テストフレームワーク「TestNG」


最近SAStrutsをよく使用するため、アノテーション機能も使用する機会が多くなった。
その中でもTestNGというテスト用フレームワークは、すごく使いやすい。

■Eclipseにプラグインとして追加
以下のURLに書いてあるようにプラグインの追加を行なう。
http://testng.org/doc/download.html

Eclipseの再起動後、プロジェクトを作成。
プロジェクトを右クリック→プロパティ→Javaビルドパス→ライブラリへ移動
外部Jarの追加で「testng-jdk15.jar」を追加で完了

■テストされるクラスの作成
テストされるクラスを作成する。
ポイントは3点。
1.コンストラクタで引数を受け取ること。
2.コンストラクタで受け取った値を引数なしでreturnする。
3.引数とコンストラクタで受け取った値を結合してreturnする。

Sample.java

public class Sample {
	private String value;

	public Sample(String value) {
		this.value = value;
	}

	public String str() {
		return this.value;
	}

	public String str(String str) {
		return str + "_" + this.value;
	}
}

■テストクラスの作成
テスト用クラスを作成する。
今回は、引数なしのメソッドと引数ありのメソッドの2種類を作成するが、
ひとまず、引数なしのメソッドだけテストするクラスを作成する。

SampleTest.java

import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

/* これ重要 */
import static org.testng.Assert.*;

public class SampleTest {
	private Sample sample;

	/** BeforeClassを定義するとテスト処理の前にこのメソッドが呼ばれる */
	@BeforeClass
	public void init() {
		this.sample = new Sample("test value");
	}

	/** 引数なしのテスト処理 */
	@Test
	public void sysout() {
		String result = this.sample.str();

		/* resultがnullではないか */
		assertNotNull(result);
		/* resultが第2引数と一致しているか */
		assertEquals(result, "test value");
	}
}

■テスト実行、確認
前項で作成したテストクラスを右クリック→実行(Run As)→TestNG Testをクリック
コンソールに実行結果がでているがひとまず無視。

プロジェクト名を右クリック→更新(Refresh)をクリック
すると、「test-output」と「temp-testng-customsuite.xml」が勝手に出力されているはず。

「test-output」は、テスト結果をHTMLとして出力してくれるため、
非常に便利。

それと「temp-testng-customsuite.xml」は、
テストを実行する際の設定ファイルになる。

■引数を渡したテストクラスの作成
先ほど作成したSample.javaの引数ありメソッドをテストする。
アノテーションParametersが2箇所入ってる。
このParametersは次項で設定ファイルに追記する。

SampleTest.java

import org.testng.annotations.BeforeClass;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

/* これ重要 */
import static org.testng.Assert.*;

public class SampleTest {
	private Sample sample;

	/** BeforeClassを定義するとテスト処理の前にこのメソッドが呼ばれる */
	@BeforeClass
	@Parameters("const-value")
	public void init(String constValue) {
		this.sample = new Sample(constValue);
	}

	/** 引数なしのテスト処理 */
	@Test
	public void sysout() {
		String result = this.sample.str();

		/* resultがnullではないか */
		assertNotNull(result);
		/* resultが第2引数と一致しているか */
		assertEquals(result, "test value");
	}

	/** 引数ありのテスト処理 */
	@Test
	@Parameters("test-value")
	public void sysout(String str) {
		String result = this.sample.str(str);

		/* resultがnullではないか */
		assertNotNull(result);
	}
}

■設定ファイルを編集
解説も面倒になってきたので、設定ファイルを見て
あとは本家サイトで記述方法を学んでください。

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="LoginSample">
	<!-- テストクラス内で使用するパラメータ系を定義する -->
	<parameter name="const-value" value="test value" />
	<parameter name="test-value" value="XXXXXXX" />

	<!-- nameは必須項目。通常パッケージ名などでカテゴリ分けする -->
	<test name="defaultPackage">
		<classes>
			<!-- テストするクラスを指定 -->
			<class name="SampleTest" />
		</classes>
	</test>
</suite>

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <img localsrc="" alt="">

Comments links could be nofollow free.