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

さて、今日はeclipse-test-frameworkを使ってPluginのテストを実行してみましょう。eclipse-test-frameworkはEclipseのダウンロードサイトにあります。Eclipse Project Downloadsからテストを実行する環境のEclipseのバージョンを選びましょう。例えば2008/01/03現在のStableは3.3.1.1なので、Latest Releaseの3.3.1.1を選びます。画面真ん中に『JUnit Plugin Tests and Automated Testing Framework』という項目が
あります。ここにあるeclipse-test-framework-3.3.1.1.zipをダウンロードしましょう。(その直下にeclipse-Automated-Tests-3.3.1.1.zipなんて気になるもんもありますが、今日はそこは触れないよ!たぶん明日か明後日か?)ちなみに3.3.1.1はリリースバージョンですので、他のバージョンを選んだ人は他のバージョンに適宜読み替えてください。

Eclipse Test Frameworkのセットアップ

さて、ダウンロードしてきたeclipse-test-framework-3.3.1.1.zipですが、Eclipseのプラグイン開発環境ではないEclipseを別途用意して、そちらに解凍してください。いつも使っている開発環境としなかったのは、自分が作成しているプラグインの古いバージョンがいつも使っている開発環境に入ってたりしないですか?この状態ですと古いバージョンを先に見つけてテスト対象になってしまいます。またPlug-inのエクスポートがうまく動かない事もあるので、別のEclipse環境を作成してそれをTarget Platformに指定しておきましょう。Target Platformの指定方法ですが、『Window - Preferences』を選んだ後、『Plug-in Development - Target Platform』を選び、Locationに作成したEclipse環境を指定してください。

Eclipse Test Frameworkを覗いてみる

次に用意されているプラグインの中をちょっと覗いてみましょう。Package Explorerで『右クリック->Import』を選び『Plug-in Development->Plug-ins and Fragments』を選んでNextを押下ください。すると下記の画面が表示されます。

『Import From』の部分はTarget Platformのまま、『Import As』の部分だけ『Projects with Soruce Folder』に選択し直して、Nextを押下してください。
最後に『Plug-ins and Fragments Found』から『org.eclipse.test』を選び、Finishをします。『Plug-ins and Fragments Found』から探すのは骨が折れるので、『Locate Plug-ins and Fragments』で『org.eclipse.test』を選んでAddするといいです。
インポートが終わるとlibrary.xmlというAntスクリプトやtestframework.htmlというドキュメントが入っています。testframework.htmlは英語でかかれていますがいいドキュメントなので一度目を通すことをお勧めします。この記事はこのドキュメントを見て、『もしかしていらないかも』と思いました。
library.xmlEclipse Test Frameworkを実行するためのAntスクリプトです。このスクリプトファイルを使って定期実行すれば自動テストが出来ていると言えます。とりあえずコマンドラインでどう実行するかをまず見てみましょう。
試しに書いてみました。

java -jar plugins/org.eclipse.equinox.launcher_1.0.1.R33x_v20070828.jar
 -application org.eclipse.test.uitestapplication -consolelog
 -data /home/kompiro/code/workspaces/rss-reader/../junit-workspace formatter=org.apache.tools.ant.taskdefs.optional.junit.XMLJUnitResultFormatter,result.xml 
 -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 
 -testPluginName org.kompiro.percs.rss.test 
 -className org.kompiro.readviewer.rss.TestRssService 

-dataは開発中のコードが含まれたワークスペースです。formatterはXML形式で出力するために指定しています。「,」区切りでファイルの指定が出来ます。-configurationや-devなどの指定はEclipseから実行したときのものをコピーしてきました。これらの指定がないとテストプラグインが発見されません。-osや-ws、-archもEclipseから実行したときのものをコピーしました。OSとウィンドウシステム、CPUアーキテクチャですね。-testPluginNameはテスト対象のプラグインの名前、-classNameはテスト対象のクラスです。
ここまで来てみてまた壁にぶつかりました。実はJUnit4にこのフレームワークは対応していないようなのです。正確に言うとJUnit4にantが対応しておらず、JUnit4側が動作するようにアダプタを提供しているんですが、OSGiの機能で同一クラスローダーで動作出来ません。たぶんちょこっと環境をいじってあげる必要があるでしょう。
試しにJUnit3形式に書き直したところ、動作しました。これにはまって2時間とかつぶれて疲れたので、残りはまた明日。たぶんlibrary.xmlを使ってAntスクリプトを書くあたりに触れていく予定です。