2016-07-12 1 views
0

私は、gralele、arquillian、およびbndツールを備えたliferay 7ポートレットの統合テストを作成しようとしています。
これはテストクラスで私の展開方法です:Gradle bndProjectBuilderテスト

@Deployment 
public static JavaArchive create() throws IllegalArgumentException, FileNotFoundException { 
    print("Eseguo il Deployment"); 

    BndProjectBuilder bndProjectBuilder = ShrinkWrap.create(BndProjectBuilder.class); 

    bndProjectBuilder.setBndFile(new File("bnd-test.bnd")); 
    bndProjectBuilder.generateManifest(true); 
    JavaArchive j = bndProjectBuilder.as(JavaArchive.class);   
    return j; 
} 

そして、これはBND-test.bndファイルです。これは正常に動作しますが、問題は、ときに出てくる機能テストでは

Bundle-Name: Beep Col Portlet Test 
Bundle-SymbolicName: it.polimi.metid.beep.beepcol.test 
Bundle-Version: 1.0.0 
Include-Resource:build/classes/main,META-INF/resources=src/main/resources/META-INF/resources 
Require-Capability:\ 
osgi.extender;filter:="(&(osgi.extender=jsp.taglib)(uri=http://liferay.com/tld/ddm))",\ 
osgi.extender;filter:="(&(osgi.extender=jsp.taglib)(uri=http://liferay.com/tld/frontend))",\ 
osgi.extender;filter:="(&(osgi.extender=jsp.taglib)(uri=http://java.sun.com/portlet_2_0))",\ 
osgi.extender;filter:="(&(osgi.extender=jsp.taglib)(uri=http://liferay.com/tld/aui))",\ 
osgi.extender;filter:="(&(osgi.extender=jsp.taglib)(uri=http://liferay.com/tld/portlet))",\ 
osgi.extender;filter:="(&(osgi.extender=jsp.taglib)(uri=http://liferay.com/tld/theme))",\ 
osgi.extender;filter:="(&(osgi.extender=jsp.taglib)(uri=http://liferay.com/tld/ui))",\ 
osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))" 

-jsp: *.jsp,*.jspf 
-plugin.bundle: com.liferay.ant.bnd.resource.bundle.ResourceBundleLoaderAnalyzerPlugin 
-plugin.jsp: com.liferay.ant.bnd.jsp.JspAnalyzerPlugin 
-plugin.sass: com.liferay.ant.bnd.sass.SassAnalyzerPlugin 
-sass: * 
-sources: true 
-dsannotations: * 

いくつかの統合テストを行い、外部ライブラリを使用しようとします。
com.liferay.portal:com.liferay.portal.test; version = '1.0.0'
私がgoiこのように、このライブラリのいくつかのクラスを使用するようにngの:

@Test 
public void prova() throws Exception { 
    Group g = GroupTestUtil.addGroup();  
} 

私はこの例外を取得:

java.lang.NoClassDefFoundError: com/liferay/portal/kernel/test/util/GroupTestUtil 

私はBndProjectBuilderは、依存関係のjarファイルが含まれていないので、それはだと思う、または私が悪いBNDファイルを設定します。
誰かが既にこの問題に遭遇しましたか?

+0

はあなたのビルドを投稿してくださいでした。あなたのテストクラスでのあなたのインポート?私はテストを取得し、gradleで動いているいくつかの問題を抱えています。私の注射は常にヌルです。あなたは私の生涯フォーラムの質問で実行しようとするサンプルモジュールを見つけることができます:https://web.liferay.com/community/forums/-/message_boards/view_message/85975754 – DKM

答えて

0

私はArquillianまたはLiferayインテグレーションについて実際に理解していないので、この回答は実験と推測に一部基づいています。

GroupTestUtilは、Liferayランタイムでバンドルcom.liferay.portal.testで既に利用可能であるはずです。クラスが存在し、エクスポートされていることを確認するのは簡単です。

OSGiフレームワークは、マニフェスト内のImport-Package命令の内容に基づいて、解決時にバンドルのクラスパスを構築します。そのリストでパッケージが参照されていないクラスはバンドルで使用できません。マニフェスト生成を使用するときは、通常は問題ありません。

テストクラスは、おそらくテスト対象のモジュールとは異なるビルドディレクトリにコンパイルされています。 Arquillianはデプロイされたバンドルと同じクラスパスでテストを実行しますが(私のテストによると)、テストクラスはbndによってImport-Package命令を生成するために使用されず、バンドルの一部ではありませんがバンドルで参照されていないパッケージを使用することができます。

修正は簡単です。明示的BND-test.bndにGroupTestUtilのパッケージをインポート:

Import-Package: \ 
    com.liferay.portal.kernel.test.util,\ 
    * 

(2行目に*が独自に他の輸入を生成し続けるためにBNDを指示します。)

+0

最後に私は問題を発見しました。 com.liferay.portal.kernel.test.utilバンドルがポータルにインストールされていません。 –

+0

私はcom.liferay.portal.kernel.testがインストールされているバンドルのリストで見たことがありますが、正しいと思われます。良いキャッチ。 – pconley

関連する問題