【ハウツー】
Javaのここ1年をふりかえってみると、アノテーションを使ったプログラミングが普及してきたと感じる。これを象徴するようにプロダクトにTestNGがある。TestNGを使えばアノテーションを挿入するだけで単体テストを行うことが出来る。これまでのJUnitなどと比べると簡単で、デベロッパに衝撃を与えた。新バージョンのリリースにあわせ、本稿ではTestNGの使い方を紹介する。
The TestNG Project, Cedric Beust氏は19日(米国時間)、TestNGの最新版であるTestNG 5.0を公開した。TestNGはJava向けに開発されたFLOSSのテストフレームワークで、アノテーションをベースにしており簡単という特徴がある。
TestNG 5.0ではEclipseといった統合開発環境における補完を考慮したり、さらに使い勝手の改善を進めてアノテーションの統廃合も進められている。よりシンプルになったという点で評価できるだろう。機能を増やすことは簡単だが、整理して削減するというのは難しい。
TestNGはアノテーションを使うため、Java 1.5以降を使うことが好ましい。Java 1.4でもJavaDocアノテーションを経由して使うことはできるが、TestNGのよさは半減だ。Java 1.5以降を用意しよう。
Java 1.5でTestNG 5.0を使った簡単な例をリスト1に示す。@TestがTestNGで使われるアノテーション。メソッドの前に1行追加するだけだ。
リスト2はどのような試験をおこなうのかをまとめたXMLファイルだ。試験したい内容をXMLにまとめておいて、試験項目ごとにそのXMLファイルを指定して実行すればいい。実行のしかたはいろいろあるが、TestNGだけを使って試験するならorg.testng.TestNGを使う。使い方をリスト3にまとめておく。リスト3のrun-with-optsターゲットにあるように、XMLファイルを使わずに-groups a,bのように直接オプションを指定して動作させる方法もある。
あとは実行すれば自動的に試験が実施され、結果がHTMLの状態で出力されるといったものだ。TestNGで指定できるアノテーションには@Test、@BeforeSuite、@AfterSuite、@BeforeTest、@AfterTest、@BeforeGroups、@AfterGroups、@BeforeClass、@AfterClass、@BeforeMethod、@AfterMethod、@DataProvider、@Factory、@Parametersなどがあり、@TestではalwaysRun、dataProvider、dependsOnGroups、dependsOnMethods、description、enabled、groups、invocationCount、successPercentage、suiteName、testName、timeOut、threadPoolSizeなどの属性を、@Bedore*/@After*アノテーションではalwaysRun、dependsOnGroups、dependsOnMethods、enabled、groups、inheritGroupsなどの属性を指定できる。詳しくはTestNGのドキュメントをご覧いただきたい。
TestNGは、JUnitは複雑すぎ使うのにイライラしすぎると、JUnitへの反立として開発されたテストフレームワークだ。これは単にJUnitが複雑になりすぎたという話としてとらえるのは軽躁だ。これはJavaの変遷を表すものとして興味深い。
アノテーションが導入される以前のJavaで、言語的に厳密にテストフレームワークを作成しようとすれば、JUnitの道は当然たどることになる。これに対しいくつかの開発者は、その方法が言語的に正しいとしても、労力を増やすような技術は不要と考えるようになる。そのころから開発にも簡単さが求められるようになり、言語に厳密に従うのではなく制約でコードを書くなりして、作業の労力をさげ、開発を簡単にする取り組みが活発になった。
そこでJavaにアノテーションの導入である。アノテーションで簡単さを維持しつつ、言語的な保証も加える。まさにその寵児がTestNGだ。むろん、EJB 3.0におけるアノテーションが大きな流れだが、EJB 3.0でさえ複雑過ぎるという声もあり、EJBを敬遠するデベロッパもある。広くデベロッパがアノテーションの効果を感じるプロダクトはTestNGだろう。
もちろんJUnitも最近のTestNGの動向を取り入れている。この記事を読んでTestNGの方が優れていると考えるのはまずい。どちらも評価していただきたいが、簡単さという点においてはTestNGは折り紙つきだ。
| アノテーションベースのテストフレームワーク - TestNG version 4.5 [2006/2/9] |
| ライトニングJava 第32回 アノテーション(7) - 採用事例 TestNG(4) [2006/1/16] |
| ライトニングJava 第31回 アノテーション(5) - 採用事例 TestNG(3) [2005/12/19] |
| ライトニングJava 第30回 アノテーション(5) - 採用事例 TestNG(2) [2005/12/12] |
| ライトニングJava 第29回 アノテーション(4) - 採用事例 TestNG(1) [2005/12/6] |
| アノテーション時代のユニットテストフレームワーク - TestNG 4.0 [2005/10/12] |
| 新しいJava用テスト・フレームワーク - TestNG 2.4公開 [2005/7/7] |
| トマトを食べれば痩せられる!? -京大ら、新発見の成分で肥満改善効果を実証 [21:00 2/10] |
| JAXA、液体シリコン中に残存する共有結合を観察 -大口径ウェハの実現に期待 [20:11 2/10] |
| NEDOなど、熱膨張が小さな樹脂複合材料ペレットの量産化に成功 [19:22 2/10] |
| 理研、一般顕微鏡を蛍光顕微鏡に強化できるアダプタを試作して性能を実証 [19:15 2/10] |
| 天の川のブラックホールが小惑星を飲み込んでいる - NASAが発表 [18:08 2/10] |
|
[西部警察]大門のサングラスは照れ隠し? 制作担当者が語る舞台裏 [09:00 2/11] エンタメ |
|
9ストーリーズ ~バレンタインのエピソード~ [08:05 2/11] キャリア |
|
RX-7改フェラーリ登場!/マジックRX-7XX 【大阪オートメッセ2012】 [08:04 2/11] キャリア |
|
【連載】鉄道トリビア 第137回 山手線と京浜東北線から●●●が消えた!? [08:00 2/11] ライフ |
|
JRグループ、「周遊きっぷ」を見直し - 19の周遊ゾーンが3/31で販売終了に [07:30 2/11] ライフ |