Компилировать модульные тесты в Adobe CQ5 CRXDE, которые ссылаются на код JUnit пакета Felix OSGI - PullRequest
2 голосов
/ 16 января 2012

Я хочу написать несколько модульных тестов, которые запускаются в Adobe CQ 5.4.Я делаю то, что описано в этой статье, для тестирования в CQ:

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

Однако после создания класса модульного теста в моем коде Java он не будет компилироваться в CRXDEпотому что он не может разрешить пространства имен org.junit.Я установил и активировал пакет JUnit в Felix, как описано (Apache Sling JUnit Core), но я предполагаю, что мне нужно сделать еще кое-что, чтобы этот активный пакет Felix был найден в CRXDE.Пакет Феликса в экземпляре 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?

Ответы [ 2 ]

2 голосов
/ 18 января 2012

Краткий ответ

Проблема не в CQ, а в CRXDE.CRXDE автоматически загружает и кэширует необходимые файлы JAR на вашем локальном компьютере, поэтому их не нужно постоянно извлекать из CQ.

Если вы переключитесь в навигацию «Package Explore», а затем развернете проект «{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

2 голосов
/ 17 января 2012

То, что вы делаете, выглядит правильно с первого взгляда.

Вы пытались перезапустить 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/

Вы можете попробовать мой образец и сравнить его с вашим.

...