2017-02-07 3 views
0

ここで特定されたものと同じ問題に対して、Weld using alternative producer from src/test/META-INF/beans.xmlが直面します。weld 2.4.2.Final Mavenテスト

テストのために、weldはtest/resources/META-INFにあるbeans.xmlを使用しません。

私はGoogleを見ていますが、私はWeldのJira問題ですが、他の人には私たちと同じ問題はないようです。

誰かがMavenでJunitテストでweldを使用する方法を知っていて、そのWeld SEがtest/resources/META-INFにあるbeans.xmlによって設定されるようにするには?

答えて

0

ウェルド自体はあなたのお手伝いができません。ウェルドSEは実際にクラスパス上の最初のbeans.xmlを選択します。より正確には、main/resources/META-INF/beans.xmlがBeanアーカイブmain/java/に使用され、test/resources/META-INF/beans.xmlがBeanアーカイブtest/java/に使用されます。したがって、これを混ぜ合わせることは最高ですが、Weldはデフォルトでそれをサポートしていません。

いずれにせよ、あなたのトラブルを解決する方法はいくつかあります。

  1. 使用Arquillian +シュリンクラップ

    CDIテストのためにあなたはそれを学ぶと、これは、あなたが望むことができる最良の方法は、非常に良いものです。 Shrinkwrapを使用すると、必要なクラスだけでなく、beans.xmlも含め、必要に応じて配置を正確に調整できます。があります。これはWeld SEテストスイートでも使用されていますので、そこに自分自身を刺激することができます。あなたのユニットテストでの溶接SE

    どこかをブートストラップしながら、

  2. を無効発見、あなたは溶接コンテナを始めています。その間に、Weld#disableDiscovery()を使用すると、合成Beanアーカイブを作成することになります。そのようなアーカイブでは、デフォルトの検出が無効になり、(methodsなどaddBeanClasses,addPackage ..などのように)特別に追加したものだけが結果のアーカイブに記録されます。あなたが発見したことがないので、beans.xmlが選ばれます!代わりに、すべての代替、インターセプタ、...を定義します(これには、Weld classのメソッドもあります)。さて、私はこれをいくつかの@Beforeメソッドに「簡単に」置くことができると思います。あるいは、Weld-junitを使用してJUnit @Ruleを提供し、クラスごとの配備を簡単に記述することもできます。

上記の両方の方法が、その苦労を助けるはずです。しかし、私が言ったように、ただ普通のWeld SEでこれを達成する方法はありません。

+0

こんにちは、私はArquillian + Shrinkwrapを試してみてください。しかし、私たちがmavenテスト(id test/java /)を実行するとき、test/resources/META-INF/beans.xmlファイルは使用されず、これはmain/resources/META-INFの中のものです。 – granier

+0

さて、私が言っていることは、ウェルドに "こんにちは、これを選んでください!"と言う方法がないということです。代わりに、私はあなたにあなたが望むことをするための2つの代替方法を提供しています。 – Siliarus

関連する問題