テストプラグインの作成
さて、またまたテスト用のプラグインを作成して、上で作成したメソッドのテストをやってみたいと思います。
エクスポートするパッケージの指定
「nu.mine.kino.plugin.google.ui」プラグイン内のソースのうち、他のプラグインに公開するパッケージを指定します。本来このプラグインは外部から呼び出されることはないのでエクスポートの指定をする必要はないのですが、テストプラグインより呼び出されるため、設定しています。
外部に公開するパッケージは、
- nu.mine.kino.plugin.google.ui
- nu.mine.kino.plugin.google.ui.preferences
を指定しました。

テストプロジェクトの作成
プロジェクト名は「nu.mine.kino.plugin.google.ui.test」にします。テスト用プラグインには、テスト対象のプラグイン「nu.mine.kino.plugin.google.ui」と「org.junit」などを依存プラグインに追加しておきます。「MANIFEST.MF」は次のようになりました。
Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Test Plug-in Bundle-SymbolicName: nu.mine.kino.plugin.google.ui.test Bundle-Version: 1.0.0 Bundle-Activator: nu.mine.kino.plugin.google.ui.test.Activator Bundle-Localization: plugin Require-Bundle: org.eclipse.ui, org.eclipse.core.runtime, org.junit, nu.mine.kino.plugin.google.ui, nu.mine.kino.plugin.log4j Eclipse-LazyStart: true
テストクラスを作成する
メソッドを実装したクラス「nu.mine.kino.plugin.google.ui.GooglePlugin」をパッケージ・エクスプローラで右クリックし、[新規]-[その他]を選択してウィザードを開きます。ウィザードでJUnitテスト・ケースを選択します。テストクラスを作成するダイアログが開くので、ソース・フォルダのプロジェクト名を「nu.mine.kino.plugin.google.ui.test」に変更します。
[次へ]をクリックするとテストメソッドの追加画面になりますが、先のメソッドgetSpellingSuggestion(final String text,IProgressMonitor monitor)にチェックして[終了]をクリックします。
テストクラス「GooglePluginTest」には次のようにメソッドを実装しました。
public void testGetSpellingSuggestion() { logger.debug("testGetSpellingSuggestion() - start"); plugin.getPreferenceStore().setValue(PreferenceConstants.GOOGLE_KEY, "xxxxxxxxxxxx"); String input = "Eclipsee"; logger.debug("入力文字列: " + input); String spellingSuggestion = plugin.getSpellingSuggestion(input, new NullProgressMonitor()); logger.debug("返却された文字列: " + spellingSuggestion); logger.debug("testGetSpellingSuggestion() - end"); }
"xxxxxxxxxxxx"の箇所は、あらかじめGoogle SOAP Search APIのサイトで取得しておいたキーコードを設定してください。
さて、このテストメソッドを実行します。パッケージ・エクスプローラで[GooglePluginTest]を選択し、Eclipseのツールバーから[実行]-[JUnitプラグイン・テスト]を選択します。Eclipseが起動して、Googleプラグインのメソッドが実行されます。テストしているメソッドは、渡された文字列でGoogleに問い合わせをしているのですが、Googleが単語の誤りなどで別の候補を返してきた場合に、ユーザーに問い合わせのダイアログを表示する仕様になっています。
あえてスペルを「Eclipsee」などと間違えるようにしているので、下のようなダイアログが表示されます。
ログには次のように出力されました。
[main] DEBUG GooglePluginTest - testGetSpellingSuggestion() - start [main] DEBUG GooglePreferenceInitializer - initializeDefaultPreferences() - start [main] DEBUG GooglePreferenceInitializer - xxxxxxxxxxxx [main] DEBUG GooglePreferenceInitializer - initializeDefaultPreferences() - end [main] DEBUG GooglePluginTest - 入力文字列: Eclipsee [main] DEBUG GoogleCorePlugin - start(BundleContext) - start 2007/05/26 11:59:55 org.apache.axis.utils.JavaUtils isAttachmentSupported警告: 要求されたクラス(javax.activation.DataHandler と javax.mail.internet.MimeMultipart)が見つかりません。Attachmentサポートが利用できません。/ [en]-(Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart). Attachment support is disabled.) [main] DEBUG GoogleCorePlugin - start(BundleContext) - end [main] DEBUG GoogleCorePlugin - getSpellingSuggestion(String, String) - start [main] DEBUG GoogleCorePlugin - getSpellingSuggestion(String, String) - end [main] DEBUG GooglePlugin - スペルミスの候補に変更します [main] DEBUG GooglePluginTest - 返却された文字列: Eclipse [main] DEBUG GooglePluginTest - testGetSpellingSuggestion() - end
プラグインが呼び出されたときにGooglePreferenceInitializerのメソッドが呼ばれているのと、スペルチェックがされて候補の文字列に変更されているのが分かると思います。
おわりに
今回は前回作成したcoreの部分を用いたGUI部分を作成しました(とは言ってもまだGoogleのスペルチェック機能をJUnitから呼べるようになっただけですが)。UIをともなうクラスのテストも、EclipseとJUnitを用いて実施できることもご理解いただけたのではないかと思います。また、プラグインの設定情報やそのデフォルト値を管理するIPreferenceStoreやorg.eclipse.core.runtime.preferences拡張ポイントも説明したほか、Eclipse標準の設定画面に自分のプラグインの設定画面を追加する方法も説明しました。
次回はこれらのビジネスロジックを利用する、検索結果の一覧を表示するビューを作成します。



