Компилирайте модулни тестове в Adobe CQ5 CRXDE, които препращат към Felix OSGI пакет JUnit код

Искам да напиша някои модулни тестове, които се изпълняват в рамките на Adobe CQ 5.4. Правя описаното в тази статия за тестване в CQ:

http://jtoee.com/2011/09/799/

Въпреки това, след като създам класа за модулен тест в моя Java код, той няма да се компилира в CRXDE, защото не може да разреши пространствата от имена org.junit. Инсталирах и активирах пакета JUnit във Felix, както е описано (Apache Sling JUnit Core), но предполагам, че има още нещо, което трябва да направя, за да може този активен пакет Felix да бъде намерен в CRXDE. Пакетът Felix в екземпляра CQ5, към който съм свързан, показва тези експортирани пакети:

junit.framework,version=4.8.2
org.apache.sling.junit,version=1.0.7.SNAPSHOT
org.apache.sling.junit.annotations,version=1.0.7.SNAPSHOT
org.junit,version=4.8.2
org.junit.matchers,version=4.8.2
org.junit.rules,version=4.8.2
org.junit.runner,version=4.8.2
org.junit.runner.manipulation,version=4.8.2
org.junit.runner.notification,version=4.8.2
org.junit.runners,version=4.8.2
org.junit.runners.model,version=4.8.2

В този примерен код за единичен тест по-долу, последните три инструкции за импортиране „не могат да бъдат разрешени“.

import org.apache.sling.api.resource.*;
import org.junit.*;
import org.junit.runner.*;
import org.apache.sling.junit.annotations.*;

@RunWith(SlingAnnotationsTestRunner.class)
public class MyUnitTest {

    public ResourceResolver getResourceResolver() {
        try {
            return getResourceResolverFactory().
                    getAdministrativeResourceResolver(null);
        } catch (LoginException e) {
            fail(e.toString());
        }
        return null;
    }
}

Моето начинаещо разбиране е, че пакетът OSGI, инсталиран във Felix, трябва да бъде достъпен за мен, за да се позовавам в моите Java класове с помощта на CRXDE, но това не се случва за пакета JUnit, който инсталирах. Защо не? Какво трябва да направя, за да накарам CRXDE да намери препратката към пакета OSGI и да компилира в CRXDE?


person Shawn    schedule 16.01.2012    source източник
comment
Хей Шон, опитвам се да създам същата тестова настройка. Имахте ли успех с някое от решенията? Благодаря много за всяка помощ. Можете ли да ме насочите към някаква прилична информация?   -  person Denis    schedule 03.04.2012
comment
Все още не съм намерил отговор защо инсталирането на пакета във Felix не е достатъчно за CRXDE да разреши препратките. В крайна сметка това, което направих, беше да реферирам по същество jar файловете, които са инсталирани във Felix от моя код. Създадох отделен пакет в моя изходен код, който да съдържа моите модулни тестове, и добавих папка libs на същото ниво като папката ми src и поставих junit-4.10.jar и org.apache.sling.junit.core-1.0. 7-SNAPSHOT.jar там, за да може кодът ми да разреши препратките. Подобно е на това, което Бертран направи...просто не разбирам защо все още е необходимо повторно препращане.   -  person Shawn    schedule 03.04.2012


Отговори (2)


Това, което правиш изглежда правилно на пръв поглед.

Опитахте ли да рестартирате CQ след инсталиране на необходимите пакети? На теория това не би трябвало да се изисква, но се чудя дали компилаторът на пакети взема правилно новите налични пакети.

Качих пакет със съдържание с подобен прост пример на http://dl.dropbox.com/u/715349/cq5-examples/junit-tests-1.0.zip (md5 2915123ad581aa225bd531247ea02878), след инсталиране на този пакет на ново копие на CQ 5.4 примерният тест се изпълнява правилно чрез http://localhost:4502/system/sling/junit/

Може да искате да опитате моята проба и да я сравните с вашата.

person Bertrand Delacretaz    schedule 17.01.2012
comment
Благодаря, че събрахте това! Опитах да рестартирам CQ след инсталиране/активиране на пакета Apache Sling JUnit Core, но все още не успях да компилирам своя тестов клас. Разгледах този примерен код и най-голямото нещо, което виждам, е, че директорията за инсталиране в apps/junit-tests/install, която съдържа два очевидно ръчно добавени .jar файла (в допълнение към динамично добавения com.example.junit -tests.jar): junit-4.8.2.jar, org.apache.sling.junit.core-1.0.6.jar. Ако вече съм инсталирал пакета JUnit във Felix, наистина ли трябва да включа тези 2 допълнителни .jars в моя пакет за модулен тест? - person Shawn; 17.01.2012
comment
Тестовете се нуждаят от тези два допълнителни пакета, така че да, ако все още не са активни (или ако имате по-стари версии), трябва да ги добавите. - person Bertrand Delacretaz; 21.06.2012

Кратък отговор

Проблемът не е в CQ, проблемът е в CRXDE. CRXDE автоматично изтегля и кешира необходимите jar файлове на вашата локална машина, така че да не се налага постоянно да се извличат от CQ.

Ако превключите към навигацията „Изследване на пакети“ и след това разгънете проекта „{SERVER}{PORT}{HASH}“, трябва да видите папка, наречена Referenced Libraries. Щракнете с десния бутон и изберете Build Path >> Configure Build Path. Оттам можете да добавите всякакви зависимости, които искате в проекта.

Дълъг отговор

CRXDE не е добър инструмент за създаване на пакети. Много по-добре е да създавате пакети чрез пълноценна IDE като Eclipse и да използвате Apache Maven като инструмент за изграждане. Apache Maven може автоматично да управлява вашите зависимости, да изпълнява тестове на вашия код и да разделя зависимостите между тест и време на изпълнение.

По този начин можете да избегнете необходимостта да зареждате зависимости, които всъщност не ви трябват като jUnit, във вашата OSGi конзола и имате повече контрол върху това как вашият пакет е изграден и разгърнат.

Day има наистина хубаво ръководство за настройване на изграждането на CQ проекти с Eclipse. http://dev.day.com/docs/v5_2/html-resources/cq5_guide_developer/ch04s02.html

person Dan    schedule 18.01.2012
comment
Мога да добавя препратки по начина, който описахте, но защо изобщо трябва да правя това? Мислех, че като инсталирам пакета във Felix, CRXDE ще разбере за него (да го направи справка), когато се зареди. Това обаче не изглежда да се случва. Дори да използвам този метод за добавяне на , не мога да намеря пакетите Felix, но в крайна сметка те се добавят от моята файлова система, вместо от работещия екземпляр на CQ. Всички библиотеки, показани в пътя ми за изграждане, идват от {SERVER}_{PORT}_{HASH} местоположения, но нещата, които добавям, идват от неща като c:\dir вместо това. Как да намеря пакета JUnit, който инсталирах във Felix? - person Shawn; 18.01.2012
comment
Тази статия (dev.day.com/docs/en/cq/current/developing/) е по-нов от този, към който сте се свързали, и казва, че CRXDE се препоръчва, когато разработвате сложни приложения от създаване на нови компоненти и Java пакети. Знам, че винаги има алтернативни начини да се правят нещата, но за този въпрос питам в контекста на използването на CRXDE. - person Shawn; 19.01.2012