junit.jarの配置

僕もはまりました。awtuiやswinguiだと上手く行くのになんで???って思ってたんですけど、勉強になりました。

textuiを使う場合はきちんとテストクラスのスタイルを決めないとだめなようです。

僕は基本的にクラスパスを設定するのが嫌いです。
ので、ライブラリはエクステンション・ディレクトリ( $JAVA_HOME/jre/lib/ext/ )に格納しがちでした。
ここに置けば自動的にクラスパスが通るので、便利なのです。
今回もその方針で、junit.jar をそちらに格納したのです。
これが悲劇の始まりでした・・・・。


[junit3.8.1]# cp junit.jar /usr/local/java/jre/lib/ext/
[junit3.8.1]# java junit.textui.TestRunner junit.samples.SimpleTest
Class not found "junit.samples.SimpleTest"


あれ? 何でクラスが見つかんないの?そこにあるやん。どこ見てんの?
試しに、


[junit3.8.1]# java junit.samples.SimpleTest
.F.E.F
Time: 0.029
There was 1 error:
1) testDivideByZero(junit.samples.SimpleTest)java.lang.ArithmeticException: / by zero
at junit.samples.SimpleTest.testDivideByZero(SimpleTest.java:49)
・・・・


うん、ちゃんと失敗するやん。
何でかいな?TestRunner経由じゃちゃんと動かんね。
他のサイトじゃ動いてることになってるのに。

と思って、http://www.junit.org/ 内を調べてたら、http://junit.sourceforge.net/README.html に書いてありました。


Important: don't install the junit.jar into the extension directory of your JDK installation. If you do so the test class on the files system will not be found.

和訳
重要: JDKのエクステンション・ディレクトリに junit.jar を置いたらダメよ。テストクラスを見つけられなくなっちゃうから。


日本語サイトにはこのことを明言してあるページがない(少なくとも、見当たらなかった)から、えらい時間を食ってしまった。
みなさん、注意しましょう。

ただし、上記の例のように、TestRunnerを直接叩かなければいいみたいです。
つまり、こちらが作ったテストクラスが、TestRunnerを呼び出す形であれば、ちゃんと動作します。

どちらを選択するかは、人それぞれでしょうね。