Pluginのテストを自動化するには(その1:心構え編)

そもそもPluginのテストを自動化するためにはJUnit Plug-in Testで動作するテスト環境を構築する必要があります。プラグインのロジックのテストにはJUnit Testで充分やっていけるので、そちらでテスト環境を構築している方も多いと思いますが、Plug-inのテスト自動化をするにはそれでは不十分なのです。まずその理由について触れます。

JUnit Plug-in Testについて

JUnit Plug-in Testは、JUnitを1BundleとしてインポートしたOSGi環境上で動作させるテストです。GUIを使ったPlug-inのみを対象にしたテストというわけではありません。
RunダイアログからJUnit Plug-in Testを作成し、Mainタブを開くと、テスト起動時のEclipseの起動アプリケーションを選択できるようになっています。ここで何も設定していない場合、『Program to Run』には『Run a Product』と『org.eclipse.sdk.ide』が選ばれているはずです。これはどういうことかというと、Junit Plug-in Testを実行する時にEclipseインスタンスを一つ別に起動して、そのインスタンス環境でテストクラスを実行プラグインとして動作させているのです。(Eclipseプラグイン開発入門でも図解されています)
なので、『Program to Run』を『Run a application』に選択し直し、右の選択コンボを表示してみると『[No Application] - Headless mode』という選択肢があります。これを選んで実行するとEclipseのアプリケーションとしては何も実行せず、Equinoxが起動し、OSGiのアプリケーションとして起動します。(このあたりの話は別途Eclipse Platform編として語ってみたい。)そしてその後、選択したテストクラスが実行されるという動作をします。
何も設定していない場合のテストと比較してみると、『Headless mode』はワークベンチを起動しない分少し速いです。(Equinoxを起動するので充分に遅いですけれども)。このテスト環境では拡張ポイントの読み込みは終わっているので、拡張ポイントを跨いだテストをする場合にも実施を検討してみてください。
もちろん自作RCPアプリケーションのエントリIDも『Run a application』に表示されます。自作RCPアプリケーションの起動部分のテスト(起動するかどうかくらいですが)もこれによって一応確認できるでしょう。
Plug-inのテストを自動化するためにはまず上記のようにEclipse上からキックできるテスト環境構築が必要です。早くもここでうまく動作しないことも多いので、次回はどうやってテスト用のプラグインを作るのかをやっちゃいます。