2016-07-12 28 views
0

Ich versuche Integrationstests für liveray 7 Portlets mit Gradle, Arquillian und bnd-Tool zu schreiben.
Dies ist meine Bereitstellungsmethode in der Testklasse:Gradle bndProjectBuilder Test

@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; 
} 

Und das ist die BND-test.bnd Datei:

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: * 

Mit funktionellen Tests dies funktioniert gut, aber das Problem kommt, wenn Ich versuche, einige Integration Tests zu tun und versuchen, externe Bibliotheken wie
zu verwenden com.liferay.portal: com.liferay.portal.test; version = '1.0.0' Wenn ich goi bin ng einige Klassen dieser Bibliothek wie folgt zu verwenden:

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

ich diese Ausnahme erhalten:

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

Ich denke, das ist, weil die BndProjectBuilder die Abhängigkeiten Glas nicht enthalten, oder ich schlecht BND-Datei konfigurieren .
Jemand hat dieses Problem bereits festgestellt?

+0

Könnten Sie bitte Ihren Build veröffentlichen. Gradle und Ihre Importe in der Testklasse? Ich habe Probleme, Tests mit Gradle zu starten. Meine Injektionen sind immer Null. Sie können ein Beispielmodul finden, das ich in meiner liferay-Forumfrage laufen lasse: https://web.liferay.com/community/forums/-/message_boards/view_message/85975754 – DKM

Antwort

0

Ich habe kein wirkliches Verständnis von Arquillian oder seiner Liferay-Integration, daher basiert diese Antwort zum Teil auf Experimenten und Spekulationen.

GroupTestUtil sollte bereits in der Liferay-Laufzeit durch das Bundle com.liferay.portal.test verfügbar sein. Es ist einfach genug zu überprüfen, dass die Klasse existiert und exportiert wird.

Das OSGi-Framework erstellt den Klassenpfad eines Bündels zum Zeitpunkt der Auflösung, basierend auf dem Inhalt der Import-Package-Anweisung in seinem Manifest; Klassen, deren Paket in dieser Liste nicht referenziert wird, sind für das Paket nicht verfügbar. Bei der Verwendung einer Manifestgeneration ist das normalerweise kein Problem.

Ihre Testklasse wurde wahrscheinlich in ein anderes Build-Verzeichnis kompiliert als das zu testende Modul. Obwohl Arquillian seine Tests im selben Klassenpfad wie das implementierte Paket ausführt (gemäß meiner Tests), wird die Testklasse nicht von bnd zum Generieren der Import-Package-Anweisung verwendet, ist nicht Teil des Bundles, ist es aber nicht kann Pakete verwenden, auf die im Paket nicht verwiesen wird.

Die Lösung ist unkompliziert. importieren Explizit GroupTestUtil ‚s Paket in Ihrem BND-test.bnd:

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

(Die * auf der zweiten Linie bnd Erzeugung anderer Einfuhren auf eigene fortzusetzen anweist.)

+0

Schließlich fand ich das Problem. Das Paket com.liferay.portal.kernel.test.util wurde einfach nicht im Portal installiert. –

+0

Ich hätte schwören können, dass ich com.liferay.portal.kernel.test in der Liste der installierten Bundles gesehen habe, aber Sie scheinen recht zu haben. Guter Fang. – pconley