16

私は Eclipse プラグインを開発しており、各プラグインのテスト スイートのビルドと実行を自動化できるようにする必要があります。(ジュニット使用)

テストは Eclipse 内で動作しており、プラグインを実際のプラグインと単体テスト用のフラグメント プラグインに分割することできます

ただし、上記の各アプローチは同じ問題を引き起こします。ビルドを発行するか、テストをトリガーする Java ant タスク/コマンドライン コマンドは、目に見える副作用を生成せず、値「13」を返します。私は見つけることができるすべてを試しましたが、Eclipse がどのように起動するかについてかなりのことを学びました (例: v3.3 以降、startup.jar は使用できなくなりました。存在しませんが、使用する必要があります)。org.eclipse.equinox.launcher )。残念ながら、これは明らかに必要な情報ですが、十分とは言えません。

私は Eclipse 3.4、Junit 4.3.1 (org.junit4 バンドルですが、むしろ JUnit 4.4 を使用したいと考えています。こちらを参照してください)を使用しています。

私の質問は、Eclipse プラグインのビルドとテストをどのように正確に自動化するのですか?

編集:明確にするために、 ant + クルーズ コントロールのようなものを使用したいのですが、Eclipse の外部で単体テストを実行することさえできません。同じことを達成する他のテクノロジーがあるため、「何かのような」と言います。MavenやBuckminsterなどを使用しているという理由だけで機能するソリューションを破棄するほどうるさくはありません。

Edit2:上記の「Java Result 13」は、coretestrunner が見つからないことが原因のようです。ログから:

java.lang.RuntimeException: Application "org.eclipse.test.coretestapplication" could not be found in the registry. The applications available are: org.eclipse.equinox.app.error, com.rcpquickstart.helloworld.application.
    at org.eclipse.equinox.internal.app.EclipseAppContainer.startDefaultApp(EclipseAppContainer.java:242)
    at org.eclipse.equinox.internal.app.MainApplicationLauncher.run(MainApplicationLauncher.java:29)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:382)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:549)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:504)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1236)
    at org.eclipse.equinox.launcher.Main.main(Main.java:1212)
    at org.eclipse.core.launcher.Main.main(Main.java:30)

!ENTRY org.eclipse.osgi 2 0 2008-11-04 21:02:10.514
!MESSAGE The following is a complete list of bundles which are not resolved, see the prior log entry for the root cause if it exists:
!SUBENTRY 1 org.eclipse.osgi 2 0 2008-11-04 21:02:10.515
!MESSAGE Bundle update@plugins/org.eclipse.test_3.2.0/ [34] was not resolved.
!SUBENTRY 2 org.eclipse.test 2 0 2008-11-04 21:02:10.516
!MESSAGE Missing required bundle org.apache.ant_0.0.0.
!SUBENTRY 2 org.eclipse.test 2 0 2008-11-04 21:02:10.516
!MESSAGE Missing required bundle org.eclipse.ui.ide.application_0.0.0.
!SUBENTRY 1 org.eclipse.osgi 2 0 2008-11-04 21:02:10.518
!MESSAGE Bundle update@plugins/org.eclipse.ant.optional.junit_3.2.100.jar [60] was not resolved.
!SUBENTRY 2 org.eclipse.ant.optional.junit 2 0 2008-11-04 21:02:10.519
!MESSAGE Missing host org.apache.ant_[1.6.5,2.0.0).
!SUBENTRY 2 org.eclipse.ant.optional.junit 2 0 2008-11-04 21:02:10.519
!MESSAGE Missing required bundle org.eclipse.core.runtime.compatibility_0.0.0.
4

7 に答える 7

12

RCPアプリケーションのヘッドレスビルドの一部としてJUnitテストを機能させました。

私はこの記事を見つけました-Antを使用したEclipsePDEユニットテストの自動化は非常に役に立ちました。それはあなたが始めるためのコードとアプローチを提供します。しかし、私が発見した多くのこと:

記事のコードについて

EclipsePDEについて

  • 別のuitestapplicationが必要testApplicationです。使用coretestapplicationしません。
  • これらのアプリケーションは両方ともSWTに依存するバンドルに含まれているためです。ビルドマシンがWindowsボックスの場合はそうではありませんが、これはほとんどの状況で取引キラーです。これらがUI以外のバンドルに分割されるのを楽しみにしています。

提供されたコードは良い出発点であることがわかりましたが、それらの実装には上記の多くの仮定が暗黙のうちに含まれていました。

これらの仮定を発見したので、作業を行うことは比較的簡単でした。

私たちの新しくて光沢のあるセットアップ

  • buckminsterはバンドルを構築します。
  • targetは、バンドルをターゲットプラットフォーム、org.eclipse.pde.runtimeおよびorg.eclipse.jdt.junitから「tester-eclipse-install」にコピーします。これで問題が解決するはずJava Result 13です。
  • ワークスペースを見て、テストフラグメントを見つけます
  • マニフェストを見てフラグメントホストを見つける
  • ワークスペースでプロジェクトを見て、テストクラスを見つけます。
  • PDETestListener複数のテストクラスを処理するように変更されたものを登録する
  • 複数のテストクラスを使用してtester-eclipse-installを呼び出します。

プラグインと機能のビルドとテストの自動化も読みましたが、PDE-Buildを直接使用していません。

于 2008-11-13T20:00:28.997 に答える
3

Eclipse の外部で Eclipse プラグイン テストを実行する方法をまだ探している人にとっては、次のコマンドが役に立ちます。

java -Xms40m -Xmx1024m -XX:MaxPermSize=512m -Dorg.eclipse.swt.browser.DefaultType=mozilla -Declipse.pde.launch=true -classpath C:\eclipse\eclipse-standard-luna-M2-win32-x86_64\eclipse\plugins/org.eclipse.equinox.launcher_1.3.0.v20130327-1440.jar org.eclipse.equinox.launcher.Main -port 22 -testLoaderClass org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader -loaderpluginname org.eclipse.jdt.junit4.runtime -classNames testpackage.testClass -application org.eclipse.pde.junit.runtime.uitestapplication -data C:\temp\log.temp -dev bin -consoleLog -testpluginname PluginName

-classpathEclipse ランチャー jar に設定する必要があります。ファイルからEclipseの正確なバージョンを取得できeclipse.iniます。

-classNamejunit プラグインのテスト ファイル名です。

-data一時ファイルに設定されます。

-testpluginnameテストするプラグインの名前です。

于 2015-01-13T23:04:00.677 に答える
2

例外を見ると、coretestapplication が見つからないことが示されています。Ant ターゲットは plugins/org.eclipse.test_3.1.0/library.xml:10 にあります。

これは実際には依存関係の問題です。Eclipse をビルドするには、すべてのプラグインが必要です。

正しく構成するには、2 つのファイルを確認する必要があります。

  1. 製品ファイル
  2. feature.xml

製品

製品ファイルに必要なすべてのプラグインが含まれていることを確認してください。

その後、org.eclipse.rcp および org.eclipse.test 機能を追加します。

...プラグインは上にあります...

<features>
      <feature id="mock_feature" version="1.0.0"/>
      <feature id="mock_feature_test" version="1.0.0"/>
      <feature id="org.eclipse.rcp" version="3.2.0.v20060609m-SVDNgVrNoh-MeGG"/>
      <feature id="org.eclipse.test" version="3.2.0.v20060220------0842282442"/>
 </features>

テストを実行するには org.eclipse.test が必要です。テストを実行するには、Eclipse を起動するために org.eclipse.rcp が必要です。

useFeatures を「true」に設定することを忘れないでください

<product name="mock" id="com.example.mock" application="com.example.mock.application" useFeatures="true">

機能.xml

テスト用の機能があると仮定すると、2 つのプラグインを追加する必要があります。

... 上記の他のプラグイン ...

<plugin
         id="org.apache.ant"
         download-size="0"
         install-size="0"
         version="0.0.0"/>

   <plugin
         id="org.eclipse.core.runtime.compatibility"
         download-size="0"
         install-size="0"
         version="0.0.0"
         unpack="false"/>

テストを実行するには org.apache.ant が必要で、起動するには org.eclipse.core.runtime.compatibility が必要です。

別の落とし穴

ターゲットの Eclipse (ビルドに使用する Eclipse のコピー) に、各プラグインのコピーが 1 つしかないことを確認してください。例えば、プラグイン・フォルダーに com.ibm.icu プラグインの 2 つのバージョンがある場合、Eclipse は新しい方を使用します。pde ビルド プラグインは特定のバージョンを使用するように構成されているため、Eclipse は特定のプラグインが存在する場合でも見つからないと文句を言います。

いくつかの考え

日食を構築するプロセス全体は、はるかに優れている可能性があります。実際、私はほとんど試行錯誤によってプロセスを取得しました。ドキュメントは古く、まばらです。エラーメッセージは役に立ちません。それはあなたに無力感と欲求不満を感じさせるだけです. この投稿が仲間のプログラマーの時間を節約するのに役立つことを願っています!

于 2009-06-08T07:41:27.460 に答える
0

Ant の代わりに、新しい Maven+Tycho を Hudson で使用した経験がありました。Tycho は、Maven での Osgi および Eclipse 開発を完全にサポートします。現在、大規模な開発が行われていますが、必要な機能のほとんどが機能しました。MANIFEST.MF ファイルを解析できるため、設定はほとんど必要ありません。

Maven の経験があれば、Maven を使い始めるのはそれほど難しくありません。Hudson は、Maven 3 のサポートがないため、もう少し問題があります。(Maven 3 の開発バージョンは Tycho で使用されます)

開始のためのリンク:

于 2009-09-03T14:20:44.080 に答える
0

PDE ビルド スクリプトを使用しており (この質問を参照)、単体テスト プラグイン用の ant ビルド ファイルをエクスポートします。これらの ant ビルド スクリプトは、「ant」ant-task を使用して PDE ビルド スクリプト (customTargets.xml) から呼び出されます。残念ながら、これは JUnit3 でしか機能しません。JUnit3 用の JUnit4 アダプターがあるはずなので、JUnit3 テストランナーから JUnit4 テストを実行できます。

おそらくMavenのようなものに移行するでしょう。PDE ビルド スクリプトは、必要な処理を行うために実際には切り取られていません。

于 2008-11-01T07:29:12.750 に答える
-1

誰かがTDDに興味を持っているなら、私がお勧めできるツールがあります: Infinitest

Infinitest サイトから抜粋した簡単な説明:

インフィニティストとは?

Infinitest は、テスト駆動開発を促進するために設計された継続的なテスト ランナーです。Infinitest は、作業中にフィードバックを提供することで TDD の学習を支援し、フィードバック サイクルを数分からわずか数秒に短縮することで TDD の習得を支援します。

クラスを変更するたびに、Infinitest がテストを実行します。どのテストを実行するかについて賢く、必要なものだけを実行します。エラーが発生した場合は、明確かつ簡潔に報告します。これにより、最新の IDE が構文エラーについて即座にフィードバックを提供するのと同様に、コードのセマンティックの正確性に関するフィードバックが即座に得られます。

于 2008-11-03T12:56:54.447 に答える
-1

AntCruiseControlを使用します。Antスクリプトと残りのビルド ロジックで単体テストを呼び出し、ビルドの反復ごとにそれらを実行できます。その後、 CruiseControlはビルド呼び出しを自動化し、毎回これらのテストを実行できます。

于 2008-11-04T19:28:25.183 に答える