きどたかのブログ

いつか誰かがこのブログからトラブルを解決しますように。

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を実行する方法で)
ただテストを作ってる人達と関係なく僕がやっていただけなので、僕の仕事のやり方がまずかったと思うところもある。


TracSVNは入ってるんだが。
僕はそろそろMavenとHudsonについて勉強をしたい。
自分の職場に活かそうと思うことは無い。
無いって言うか、ついてこれるように面倒を見ることになるのが嫌だ。
僕だって何も知らないところから始めるんで。


Mavenにしたとしてsqljが重くのしかかる。
Maven2プラグインを作れってことか??
precomplieなんだけど、そんなフェーズがあったっけ(汗