Pluginのテストを自動化するには(その3:テストクラスをHeadlessで動かす:前編)

テーマ『Pluginのテストを自動化する』の第3回です。正月中に記事をまとめきろうとするのは精神上どうなのかと若干後悔。休めるときに休んどけという声もあるでしょう。でもやれるところまでやるよー!
世に出ている記事はeclipse-test-frameworkを使うところ以降を扱ったものが多いですよね。でもそこに到達するまでが遠い。今回の記事もそこ以前のお話です。
そもそもテストクラスをHeadlessモード、つまりCUI(もしくはコンソール)から起動したことありますか?前回簡単に触れましたが、『JUnit Plug-in Test』のランチャーはEclipseインスタンスを別途起動し、そこでテストを実行します。この操作をCUI(コンソール)から実行する事が今回のテーマです。ここまでうまくできていなければ自動化なんて本当に夢のまた夢です。
さて、Eclipse上から実行しているプラグインのテストはどういうように実行されているのでしょうか。実行されているコマンドを確認することは簡単にできます。作成した『JUnit Plug-in Test』のラウンチコンフィグをデバッグモードで実行し、図1の箇所を右クリック->Propertiesを選択するとどのようなコマンドが実行されたか見ることができます。
実際にLinux環境で1テストケースを実行した例の場合は下記のコマンドが実行され手います。

/usr/lib/jvm/java-6-sun-1.6.0.03/bin/java -Declipse.pde.launch=true -classpath /home/kompiro/target-eclipse/plugins/org.eclipse.equinox.launcher_1.0.1.R33x_v20070828.jar -agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:52142 org.eclipse.equinox.launcher.Main -os linux -ws gtk -arch x86 -nl ja_JP -version 3 -port 42874 -testLoaderClass org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader -loaderpluginname org.eclipse.jdt.junit4.runtime -classNames org.kompiro.readviewer.rss.TestRssService -application org.eclipse.pde.junit.runtime.coretestapplication -data /home/kompiro/code/workspaces/rss-reader/../junit-workspace -configuration file:/home/kompiro/code/workspaces/rss-reader/.metadata/.plugins/org.eclipse.pde.core/pde-junit/ -dev file:/home/kompiro/code/workspaces/rss-reader/.metadata/.plugins/org.eclipse.pde.core/pde-junit/dev.properties -os linux -ws gtk -arch x86 -nl ja_JP -testpluginname org.kompiro.percs.rss.test

このコマンドを簡単に見ていきます。

-application org.eclipse.pde.junit.runtime.coretestapplication

というアプリケーションが指定されています。『JUnit Plug-in Test』で実行した時のためのアプリケーションです。実行すると実行結果や実行中のテストがJUnitビューに表示されますが、

-port 42874

と指定しています。このポートに接続することでJUnitの実行しているテストを制御したり、実行結果を収集しているのです。

さて、このコマンドを使ってJUnitの実行結果を収集出来るでしょうか。答えはNoです。このコマンドではJUnitビューが必要なように、実行結果の収集をするものが別途必要になってしまいます。そこで登場するのがEclipse-JUnit-Frameworkです。(ここまで長かった。そしてくどい。)
明日はeclipse-test-frameworkを使って今渡こそコンソールで実行してみます。(今日の記事はなんだったんだ?っていうつっこみは自分もそう思ってます)