2016-07-12 2 views
0

Я пытаюсь написать интеграционные тесты для портлетов liferay 7 с помощью инструмента gradle, arquillian и bnd.
Это мой метод развертывания в тестовом классе:Тест 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; 
} 

И это файл БНД-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 нг использовать некоторые классы этой библиотеки, как это:

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

Я получаю это исключение:

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

Я думаю, что это потому, что BndProjectBuilder не включает зависимости баночки, или я плохо настроить BND файл ,
Кто-то уже столкнулся с этой проблемой?

+0

Не могли бы вы опубликовать сборку. gradle и ваш импорт на тестовом классе? У меня есть некоторые проблемы с получением тестов и с градиентом. Мои инъекции всегда равны нулю. Вы можете найти примерный модуль, который я пытаюсь запустить на моем форуме форума: https://web.liferay.com/community/forums/-/message_boards/view_message/85975754 – DKM

ответ

0

У меня нет никакого реального понимания интеграции Аркиллиан или Лиферэй, поэтому этот ответ частично основан на эксперименте и спекуляции.

GroupTestUtil должно быть уже доступно во время выполнения Liferay через комплект com.liferay.portal.test. Достаточно легко проверить, что класс существует и экспортируется.

Основы OSGi строят путь к классам пакета в момент разрешения на основе содержимого инструкции Import-Package в ее манифесте; классы, пакет которых не указан в этом списке, недоступны для пакета. Обычно это не проблема при использовании поколения манифеста.

Ваш тестовый класс, вероятно, был скомпилирован в другую директорию сборки, чем тестируемый модуль. Хотя Arquillian будет запускать свои тесты в том же классе, что и развернутый пакет (согласно моему тестированию), тестовый класс не используется bnd для создания инструкции Import-Package, не является частью пакета, но не является способный использовать пакеты, не указанные в комплекте.

Исправить легко. Явный импортировать пакет GroupTestUtil в твоей BND-test.bnd:

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

(* на вторую линии инструктирует BND продолжать генерировать другой импорт на своем собственном.)

+0

Наконец-то я нашел проблему. Просто узел com.liferay.portal.kernel.test.util не был установлен на портале. –

+0

Я мог бы поклясться, что увидел список com.liferay.portal.kernel.test в списке установленных пакетов, но вы, кажется, правы. Хороший улов. – pconley

Смежные вопросы