
次世代テストフレームワークでテストを変える(3)
実現場でTestNGを活躍させる“5”つのテクニック
株式会社クロノス
阪田 浩一
2008/10/9
| 今回の主な内容 ・【1】Antからテストをサクッと実行! ・【2】テストを並列実行してスピードアップ! ・【3】いままでのJUnitのテストはドースル? ・【4】TestNG+DbUnit=楽々DBテスト ・コラム 「DbUnitをアノテーションで 利用するライブラリDbUnitNG」 ・【5】レポートでもテスト結果を確認できる ・実現場でテスティングフレームワークを 推進するには? |
前回の記事「JUnitにはないTestNGの“5”つの強力なテスト用機能」では、JUnitにはないTestNG独自の機能を解説し、TestNGの魅力を紹介しました。
最終回である今回は、ライブラリとの連携やAntからの利用、レポートの出力などプロジェクトで実際にTestNGを活用する際に必要となる5つのテクニックを解説します。
【1】Antからテストをサクッと実行!
これまでテストはEclipseプラグインを使って実行しましたが、TestNGにはAntのタスクがあるため、Antからテストを実行することもできます。Antについては下記記事が参考になります。
■ build.xmlでTestNGのタスクを利用するには?
AntのXMLファイルであるbuild.xmlのサンプルを次に示します。
| リスト1 テストを実行するbuild.xml | |
|
AntからTestNGのテストを実行するために、まず<taskdef>要素を使ってTestNGのタスク定義を追加します。<taskdef>要素のclasspath属性にはTestNGのJARファイルへのパスを指定します。こうすることで、XMLファイルの中で<testng>要素を使用できます。
テスト実行に関する設定は<testng>要素に指定します。testng.xmlからテストを実行する場合、<xmlfileset>要素を使い、includes属性にTestNGの設定ファイル名を指定します。なお、設定ファイルにはクラスパスを通します。
■ testng.xmlを使わずにテストを実行するには?
testng.xmlを使わず単にテストクラスを実行する場合は、<xmlfileset>要素の代わりに<classfileset>要素を使います。
<classfileset |
上記のようにすると、ディレクトリにあるすべてのテストクラスをテストとして実行します。
■ テストマシンを用意して、自動でテストを実行させよう
このようにAntを利用すると、手動ではなく自動でTestNGのテストを実行できます。
TestNGでもJUnitでもプロジェクトにおいてテストを作成したときは、必ずテスト実行用にマシンを用意し、日々作成したすべてのテストをテストマシンで自動的に実行させます。すると、プログラムを変更した際にほかの処理に思わぬ影響を及ぼした場合でも、テストが失敗して早期に問題を発見できます。
【2】テストを並列実行してスピードアップ!
1つのテストを実行するのであれば、実行時間は微々たるものです。しかし、プロジェクトにおいてリグレッションテスト(回帰テスト)を実施する場合など、多くのテストを一気に実行するときはどうでしょうか?
プロジェクトが進むほどテストケースは増えるため、徐々にテスト全体が完了するまでの時間が長くなり、問題となる場合があります。
■ 複数のスレッドでテストを実行させる
TestNGでは、複数のスレッドを使ってテストを並列実行できます。並列に実行することで、テストスイートとしての実行時間を短縮できます。
![]() |
| 図1 テストの並列実行 |
では、並列実行をサンプルで確認しましょう。まず、TestNGの設定ファイル「testng.xml」を次に示します。
| リスト2 並列実行する場合のtestng.xml | |
|
並列実行する場合<suite>要素のparallel属性とthread-count属性を設定します。
■ 並列にする「単位」を設定する
thread-count属性に使用するスレッドの数を指定します。サンプルでは「2」を指定しました。スレッドを2つ使ってテストを実行します。
parallel属性に「tests」と指定すると、各<test>要素に含まれるテストは同じスレッドで実行します。サンプルでは2つの<test>要素があります。
1つはConcurrentTestクラスを含んだ<test>要素、もう1つはAnotherConcurrentTestクラスを含んだ<test>要素です。そのためConcurrentTestクラスにあるテストメソッドはすべて同じスレッドで実行し、同様にAnotherConcurrentTestクラスにあるテストメソッドもすべて同じスレッドで実行します。
次ページでは、実際に並列実行した結果と並列実行しない場合の時間の差を提示し、テクニックの3つ目としてJUnitのテストが資産としてある場合でもTestNGを利用できる2つの便利な機能について解説します。
| Index | ||||||||
|
||||||||
次世代テストフレームワークでテストを変える バックナンバー 連載インデックスへ»
- 第1回 JUnitより簡単なオープンソースの「TestNG」とは?
- 第2回 JUnitにはないTestNGの“5”つの強力なテスト用機能
- 最終回 実現場でTestNGを活躍させる“5”つのテクニック
| Java Solution全記事一覧 |
TechTargetジャパン
- Scalaのパッケージ、アクセス修飾子、オブジェクト継承 (2012/5/22)
インポート、パッケージオブジェクト、抽象クラス/抽象メソッド、オーバーライド、final、シールドクラスなども - 基幹系システムでCloud SQLは使えるか試してみた (2012/5/17)
サンプルとしてMRPシステムを作成して動かし、「再帰呼び出し」などのパフォーマンスを測定して検証してみます - アジャイル管理ツール9選+Pivotal Tracker入門 (2012/5/14)
群雄割拠のアジャイルプロジェクト管理ツールを9つ紹介し、特に注目を集めているPivotal Trackerの基本的な使い方を解説します - サーバサイドJSやJavaでWebアプリが作れるXPages (2012/5/11)
Notes/Dominoの資産をサーバサイドJavaScriptやJavaで操作し、HTMLやJavaScript、CSSをUIにできる技術を紹介
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -


