2017-06-20 3 views
3

Eclipse RCPアプリケーションはかなり大規模で、プラグインを正しくテストする方法がわかりません。効率的にJUnitテストEclipse RCPプラグイン

  • 各プラグインには、ユニットテストを含むテストフラグメントがあります。
  • RCPプラットフォームの実行を必要としない、より小さいテストでは、単に「標準」JUnitテストランナーを起動します。 RCPプラットフォームを必要とする試験については、

enter image description here

  • 、JUnitのプラグインテストランナーを使用して、それをテストする可能性があります。 JUnitのプラグインテストのため

enter image description here

  • は、RCPプラットフォームの起動時にロードされたプラグインを定義することが可能です。

enter image description here enter image description here

  • 問題:のJUnitプラグインテストを実行しても多くの時間を要しRCPプラットフォーム以来、資源(代わりに、単純なJUnitテストのためのmillicsecondsの秒)、およびすべてのプラグインが必要です始める。

  • 質問:どのように私は効率的にテストのために実行されているプラ​​グインを最小限に抑えることができますか? RCPプラットフォームへの依存性を最小限に抑えるためにはどのようなオプションが必要ですか(設定サービスや拡張ポイントなど)? RCP Platformサービスを模擬するためのMockingライブラリや、少なくともいくつかのベストプラクティスがありますか?

今私はのJUnitプラグインテストランナーでいくつかのまともなTDDを行うには想像できない、それだけでこれらのテストを実行するのに時間がかかりすぎます。

このトピックに関するアドバイスや経験は大歓迎です!

答えて

4

私はあなたの痛みを感じることができます:プラグインテストがうまくいかない!そして、私は完全に満足できる解決策も見つけていません。

必要なプラグインを最小限に抑えることができますが、依存グラフの変更で起動設定を調整する必要があることが多いため、実用的ではありません。そして、あなたの(共有)起動構成にプラットフォーム依存の断片(SWT)があると、これは悪化します。私は通常のすべてのワークスペースに戻り、ターゲットプラグインオプションを有効にしており、起動速度に顕著な違いは見られませんでした。

私はRCPプラットフォーム用のモックライブラリを知らない。

非常に単純な場合を除いて、私はあなたが簡単に行動を間違える可能性があるので、プラットフォームの一部を嘲笑することはしません。このポストも参照してください:https://stackoverflow.com/a/31938571/2986905

私のプラクティスは、アプリケーションのコードからできるだけプラットフォーム依存性を外して、プレーンなJUnitテストを書くことができるようにすることです。プラットフォームAPIに対するカスタム抽象化は、ここで繰り返し使用するケースに役立ちます。

さらに、ワークベンチを実行しなくても、驚くほど多くのプラットフォームAPIを使用することができます。もちろん、すべてのSWTおよびJFace API、環境設定...プラグインテストから離れてください。たとえば、ビューの内容をIViewPart(またはそのe4に相当するもの)から分離することで、ビューを必要とせずにテストを作成し、実行中のワークベンチインスタンス(明らかに明示している場合は赦免)を行うことができます。

+1

いい回答です。ロバートマーティンの書籍の中の1つの中核的な勧告を思い起こさせてください。*できるだけPOJOを書いて、ロジックを適切に単体テストできる*。 – GhostCat

+1

寄付いただきありがとうございます!私は同意する、私は可能な限りすべてのプラットフォームを維持しようとしています。残念ながら、私は唯一のコードを書いているわけではありません;)アプリケーションモデル、プラットフォーム、プリファレンス/ UIのカプセル化は、実際には多くのクラスではありません。コードが適切にテストされていないため、テスト容易性を最適化するためのリファクタリングは危険です。)経験から話すと、時には奇妙な副作用が発生し、問題が発生することがあります。 – kerner1000

関連する問題