Скомпилируйте модульные тесты в Adobe CQ5 CRXDE, которые ссылаются на код JUnit пакета Felix OSGI.

Я хочу написать несколько модульных тестов, которые запускаются в 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 дополнительных файла .jar в пакет модульного тестирования? - person Shawn; 17.01.2012
comment
Для тестов нужны эти два дополнительных пакета, поэтому да, если они еще не активны (или если у вас есть более старые версии), вам нужно их добавить. - person Bertrand Delacretaz; 21.06.2012

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

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

Если вы переключитесь на навигацию «Package Explore», а затем развернете проект «{SERVER}{PORT}{HASH}», вы должны увидеть папку с именем «Библиотеки ссылок». Щелкните правой кнопкой мыши и выберите Путь сборки >> Настроить путь сборки. Оттуда вы можете добавить любые зависимости, которые вы хотите в проект.

Длинный ответ

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