2017-07-20 9 views
7

からJUnit4 + Hamcrest 1.3 + Mockitoを動作させるためにはどうすれば+ Mockito 2.8.47Eclipseので動作するようにJUnitの4.12 + Hamcrest 1.3を得ることができたので、私が追加したときにすることをそれらを依存するものとして、私のテストが実行されます。Eclipseとティコ

  • junit 4.12
  • org.mockito.mockito-core 2.8.47
  • (私はこれをやった方法は、プラグイン/機能へのMaven Centralから次 アーティファクトをバンドルし、P2を経由してそれらを提供するためにp2-maven-pluginを使用していますorg.hamcrest.all 1.3.0

私のテストフラグメントにプラグインを依存関係として追加すると、 Eclipseで テストを実行します。

しかし、同じフラグメントのティコビルドが 次のメッセージで失敗します:

java.lang.LinkageError: loader constraint violation: loader (instance of org/eclipse/osgi/internal/loader/EquinoxClassLoader) previously initiated loading for a different type with name "org/hamcrest/Matcher" 
at java.lang.ClassLoader.defineClass1(Native Method) 
at java.lang.ClassLoader.defineClass(ClassLoader.java:763) 
at org.eclipse.osgi.internal.loader.ModuleClassLoader.defineClass(ModuleClassLoader.java:273) 
at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.defineClass(ClasspathManager.java:632) 
at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findClassImpl(ClasspathManager.java:586) 
at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalClassImpl(ClasspathManager.java:538) 
at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalClass(ClasspathManager.java:525) 
at org.eclipse.osgi.internal.loader.ModuleClassLoader.findLocalClass(ModuleClassLoader.java:325) 
at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:345) 
at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:423) 
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:372) 
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:364) 
at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:161) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:12) 
at org.junit.Assert.assertThat(Assert.java:956) 
at org.junit.Assert.assertThat(Assert.java:923) 

だから、私のフラグメントがする前にいくつかの他のプラグインは、パッケージ org.hamcrest.Matcherをロードしているようです。これはおそらく が、 JUnit/Hamcrest/Mockito設定を取り巻くインポート/エクスポート/部分インポート/部分エクスポートの混乱に起因すると考えられます。

誰もがアイデア持っています - またはより良い:作業例 - 3つのコンポーネントが中にチェックのために(テストを実行するかどうかのクイック チェックのため)、IDE内およびティコ(両方とも一緒に仕事を取得する方法のをビルド)?

+0

私はMockito 2.8.47はすでにhamcrestを持っていると思います。 – want2learn

+0

私はHamcrestとJUnitだけに依存するテスト・フラグメントでエラーを出します。 –

+0

私は、あなたが問題の原因がJUnit/Hamcrest/Mockitoの輸出混乱であるという点では正しいと思います。 p2-maven-pluginは誤ったマニフェストを生成する可能性があります。問題を再現するための最小限のプロジェクトを追加できますか? –

答えて

1

ローダーがバンドル内の依存関係を望んでいるように見えます。

しかし、私はあなたのテストライブラリをバンドルに入れていないと思います。

製品の依存関係に追加して、どのように反応するかを確認できます。