TestNG初体験記
職場で、「TestNG」というキーワードが、いまさら!!出てきたので、とりあえず使い心地を確かめてみた。
カバレッジはEclEmmaで取れる。
EclEmmaはJUnitでのカバレッジも、TestNGでのカバレッジも取れる。
わーい、coberturaよりも重宝しそうだよ、このプラグイン。
まだ全然実験が進んでないのだが、JUnit3をTestNGに変換できるみたいだ。
あと、JUnitモードを使えば変換しなくても動かせるみたいだ。
その変換せずに動かすっつーのを試して失敗してるので悩んでいる。
JUnit4は無理ってことかな・・・。
どうやらそうみたいだ。
テストケースをJUnit3のやり方で書いてみたら動いた。
extends TestCaseが無いと無理ってことだ。
JUnit4はさすがにTestNGでは動かないと、僕は結論付けた。
時系列で考えるならば、TestNGはJUnit4よりも先に出てるので、きっとそういうことだろう。
職場で使ってたツールがJUnit4をベースにしてないので、
私は今の案件でもずっとJUnit3でテストコードを書いている。
そのことが逆にTestNGに移行しやすさになりそうだ。
フレームワークを開発してる一部の人達がJUnit4で書いてるようなんだが、そこまで面倒見てあげられないなー。
さて、JUnit3とTestNGを混ぜて実行するためにtestng.xmlを作って実行出来るまでに至った。
ここで疑問がフツフツ。
このJUnitモードを使って混在した場合にもちゃんとEclEmmaでカバレッジ取れてるよね?
答えは「取れる」だ。
JUnitモードになると、正規表現にマッチしていても、TestNGのテストケースは動かないようだ。
JUnitモードでは、extends TestCaseしてあるのが前提っぽい。
だから正規表現でマッチするTestNGのクラスは、エラーになる。コンソールに赤く出る。うざい。
はじめはJUnit3には「Test」をクラス名に入れて、TestNGには「NG」をクラス名に入れていたので、
エラーにはならずにすんなり実行出来ていた。
まあ、実験のために同じネーミングでやってみたら、
すべて実行出来るけど、コンソールに赤いのが出るからやっぱり元通りにしようと思った。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="sample"> <test name="junittests" junit="true"> <packages> <package name="com.kidotaka.*"> <include name=".*Test[0-9]*"></include> </package> </packages> </test> <test name="testngtests" junit="false"> <packages> <package name="com.kidotaka.*"> <include name=".*NG[0-9]*"></include> </package> </packages> </test> </suite>
JUnit3からコンバートしたら、リネームしろってことになるのか・・・。うわぁ、だるい。
あれ?
JUnitでは、assertEqualsの左が期待値で、右が実際の値だったはずだが、
TestNGでは、これが逆なのか????
ええぇぇ〜〜〜!??
これはちょっと怖いな。
JUnit3からコンバートした後に、それが逆転してあることを確認したくなった。
JUnit3からコンバートしてみた。
TestNGの@Testアノテーションが付いている。
しかし、驚きなのはextends TestCaseは外れていないし、assertEqualsもJUnit3の物だ。
ほほぅ、そういうことか。
ある意味見せかけの移行だよね。
書き直さない限り、ずっとJUnit3のライブラリが必要であることには違いがない。
テストケースクラスを起動するのがJUnitではなくなっただけの話だ。
頭をもたげてしまった。
あと、職場のリポジトリにtest-outputが誤ってコミットされていたことがある。
誰かがTestNGを使っているってことか??
TestNGのレポートは見た目が良くない。
emmaのレポートをIDE以外で見たいのだが、よく方法が分からない。
とりあえずこのページは役に立ちそうなのでコピペしとくよ。
http://prepro.wordpress.com/2009/05/03/emmaant%E3%82%92offline%E3%83%A2%E3%83%BC%E3%83%89%E3%81%A7%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B/
理論的には、
うーんと、レポート見た目がどうなるか良くわからないが、
とりあえずTestNGのこと、カバレッジ計測も出来ること、Antで出来るってことが分かった。
あとは、継続的にやるってことなんだが、うちのプロジェクトはどうもその手のことに興味がなかった。
一時期僕は頑張ってJUnitとCobertura等のツールを使ったレポートをWebサーバーに毎日Upしていた。
(単純にWindowsタスクでAntを実行する方法で)
ただテストを作ってる人達と関係なく僕がやっていただけなので、僕の仕事のやり方がまずかったと思うところもある。
TracとSVNは入ってるんだが。
僕はそろそろMavenとHudsonについて勉強をしたい。
自分の職場に活かそうと思うことは無い。
無いって言うか、ついてこれるように面倒を見ることになるのが嫌だ。
僕だって何も知らないところから始めるんで。
Mavenにしたとしてsqljが重くのしかかる。
Maven2プラグインを作れってことか??
precomplieなんだけど、そんなフェーズがあったっけ(汗