hogehoge

次世代テスティングフレームワーク「TestNG」

コラム, 記事 コメントは受け付けていません。
10月 202008
hugahuga
函館Laboratory
高橋 哲也

tetsu.jpg
皆さん、はじめまして。
アットウェア函館ラボラトリーの高橋といいます。
今回はJava開発における単体テストの必需品「テスティングフレームワーク」について少しお話をさせて頂きたいと思います。
私達のソフトウェア開発という仕事は『プログラムを書くこと(コーディング)』が
メインの仕事と思われがちですが、実はそうではありません。
むしろコードを書いてからが長い戦いの始まりなのです。
そう、それは『テスト』です。
自分達が創りあげたものに間違いは無いか?
お客様の要望はちゃんと満たせているか?
パフォーマンスのボトルネックになっている所は無いか?
品質を向上させるため、様々な視点からのテストを行う必要があります。
少し話が逸れてしまいますが、私はプロジェクトが成功するかどうかは『如何に精度の高いテストを効率良く行うか』に懸かっていると考えています。
テストにかかる膨大な作業量を圧縮することも勿論ですがテストを効率良く行うということは、それだけ多くのテストパターンを網羅することに繋がりそれはシステムの品質へと反映されていきます。
さて、Java開発の単体テストと言えば「Eclipse + JUnit + Mock」が鉄板の組み合わせとなって久しいですが、皆さんはJUnit以外のテスティングフレームワークを使ったことがありますか?
私はJavaでの開発は5年程やってきましたが、恥ずかしながらJUnit以外は、業務で使ったことがありませんでした。これを読んでいる方もそういう方が大半ではないでしょうか?
そこで紹介したいのが『TestNG』です
TestNG
http://testng.org/doc/index.html
あまり聞き慣れない方もいるかと思いますが、2004年にバージョン1.0がリリースされて以来、海外では非常に高い評価を受けています。
JUnitもバージョン4.0からアノテーション対応となりましたが、その先駆け的存在だったのがTestNGです。
予め言っておきたいのですが、TestNGを使うと単体テストの作業量を大幅に削減出来るといった夢のようなお話でも、今すぐJUnitを捨ててTestNGを使おうといった極端な話でもありません。
むしろJUnitとTestNGはパッと見るとよく似ています。
では何故わざわざ紹介するのかと言いますと、両者の決定的な違いは設計思想にあります。
JUnitはその名の通り「ユニット」、つまり単一のオブジェクトをテストしやすくするために作り上げられたフレームワークですが、TestNGは、それよりも高位のテストにも対応するよう設計されているため、JUnitには無い機能が数多く実装されています。
ここでTestNG独自の機能をいくつか簡単に紹介してみましょう。
・ 並列処理で実行出来る
  TestNGは複数スレッドを使用してテストを並列処理することが可能なため、テストの実行時間をかなり削減してくれます。テストケースひとつで実行する場合は、それほど問題ありませんが、リグレッションテストなどを行う際には非常に有効です。また、Antからの実行も簡単なので、テスト用のマシンで自動実行させておくような使い方も簡単に出来ます。
(JUnit4をAntで実行するにはAnt1.7以上が必要。JUnit3までなら1.6.xで大丈夫・・・のはず)
・ JUnitとも共存出来る
  今まで作成したJUnitのテストケースも実行出来るようになっています。
・ テストメソッドに依存関係を作ることが出来る
  JUnitの思想が「テストの分離」であるのに対し、TestNGではテストケースの依存関係が作ることが可能になっています。例えば、テストメソッドAが失敗したら、テストメソッドAの機能に依存しているテストメソッドBはスキップしたり、実行順を決めてテストしたりということが出来るようになっていますので、大規模なテスト・スイートの実行が非常に簡単になっています。
・ 再テストが簡単
  TestNGはテストを実行するとtestng-failed.xmlというファイルを作成し、失敗したメソッドを記憶しておいてくれるので、再テスト時には失敗したメソッドだけを簡単に実行出来ます。
(JUnitはメソッド1つか全メソッドしか実行出来ない)
と、なかなか使い勝手の良さそうな機能が盛り込まれており、開発者心をくすぐるものがあります。
ですが、先程も言ったように「今すぐTestNGに乗り換えよう!」というつもりは無いのです。もちろんJUnitの方が都合の良いという場面も多々あります。
ただ、こういった性格の違うフレームワークに触れることは、自分の幅を広げるのに大いに役立ちます。JUnitのテストケースを作るときも、今までとは違う視点で取り組むことが出来るでしょう。
どうです?気になってきませんか?
テスティングフレームワークとして新たな可能性を示して見せたTestNG。
これからも注目していきたいと思います。
【余談】
TestNGの「NG」は『Next Generation』らしいです。
OK、NGのNGだと思ってました・・・。

当社サイトのご利用について  |  Image: scottchan / FreeDigitalPhotos.net
© 2012 アジャイル開発 | Enterprise Java | 株式会社アットウェア Suffusion theme by Sayontan Sinha