JUnitのテストメソッド名に日本語を使ったときの問題と対処
メソッド名を日本語にする話 - 日々常々とかにも書いてるんですが、テストメソッド名に日本語を使うのはザラです。むしろ使わない理由がありません。こんなのですね。
import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; import org.junit.Test; public class HogeTest { @Test public void ほげはほげのはず() throws Exception { assertThat("hoge", is("hoge")); } }
例が悪い?そこは気にしないでくださいませ。
さて、メソッド名に日本語を使った時に、一部IDEでは問題が起こることがあります。一部と言いつつ私はEclipserなのでEclipseの話です。
メソッド単位で実行する
ちょっと脇道にそれてEclipseの話。
Eclipseはいつからかテストメソッドを選択して実行できるようになっています。確か昔はクラス単位で実行した後、テスト結果の出ているところで選択してからならメソッド単位での実行も出来たんですが、今は一気に出来ます。
やり方は簡単で、実行したいメソッドを選択して実行するだけです。カーソル合わせて*1実行するだけ。えい。
実行結果を見てもらえば testMethod だけが実行されていることが判って貰えると思います。
なお、QuickJUnitでは昔からメソッド単位の実行ができて、こちらだと「実行したいテストメソッド内にカーソルがあれば」そのテストメソッドが実行されます。対してEclipseでは「実行したいテストメソッドを選択していれば」になります。若干挙動が違ったりします。
対処: eclipse.iniに書く
参考: MacOSX上でQuick JUnitをお使いの皆様へ。日本語クラス名、メソッド名の対応方法 - Fly me to the Juno!
はい、このままです。eclipse.ini に書いてください。QuickJUnitに限ったことではなく、そう言うことです。Macかどーかも関係無く、Winでもeclipse.iniに書けばおっけーです。
-Dfile.encoding=UTF-8
これでいけるはず。と思って素直に再起動……してもだめでした。cleanしてもだめ。なんでだろう。
対処2
正直よくわかってないです。eclipse.iniに追記して、DockにあるEclipse.appを実行ではだめでしたが、ターミナルから
open (Eclipseインストール先)/Eclipse.app
なんでだろう。でもそれでいけてるんで、上記のalias作って起動するようにしてます。
うごきゃーいいんだようごきゃー………いや、出来ればちゃんと解決したいんですけど……。
おまけ:プロダクトコードで使わない理由
補完が効かせにくいとか、その辺の理由でプロダクトコードに積極的に日本語メソッド名や変数を使うことはありません。積極的に使わない以上、無理に一部に導入したところで混乱が加速するだけです。プロダクトコードに日本語を使うかどうかは別の議論があるかもしれませんが、現時点では使うことは考えないことにしています。