2012-01-16 2 views
2

Я хочу написать некоторые модульные тесты, которые выполняются внутри Adobe CQ 5.4. Я делаю то, что описано в этой статье, для тестирования в CQ:Компиляция модульных тестов в Adobe CQ5 CRXDE, эта ссылка Felix OSGI bundle Код JUnit

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?

+0

Эй, Шон, я пытаюсь создать такую ​​же тестовую установку. Удалось ли вам с любым решением? Thx много для любой помощи. Можете ли вы указать мне какую-то приличную информацию? – Denis

+0

Я еще не нашел ответа, почему для установки ссылок в Felix недостаточно для CRXDE для разрешения ссылок. В конце концов, я сделал это, чтобы по существу повторно ссылаться на файлы jar, которые установлены в Felix из моего кода. Я создал отдельный пакет в своем исходном коде, чтобы содержать мои модульные тесты, и я добавил папку «libs» на том же уровне, что и моя папка src, и поместил junit-4.10.jar и org.apache.sling.junit.core- 1.0.7-SNAPSHOT.jar, поэтому мой код может разрешить ссылки. Это похоже на то, что сделал Бертран ... Я просто не понимаю, зачем нужна повторная привязка. – Shawn

ответ

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/

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

+0

Спасибо, что поставили это вместе! Я попытался перезапустить 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 в свой комплект для тестирования модулей? – Shawn

+0

Тесты нуждаются в этих двух дополнительных пакетах, поэтому да, если они еще не активны (или если у вас есть более старые версии), вам нужно их добавить. –

2

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

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

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

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

CRXDE не является хорошим инструментом для создания пучков. Гораздо лучше создавать пакеты через полноценную IDE, такую ​​как Eclipse, и использовать Apache Maven в качестве инструмента сборки. Apache Maven может автоматически управлять вашими зависимостями, запускать тесты на вашем коде и отдельные зависимости от тестов и времени выполнения.

Таким образом, вы можете избежать необходимости загружать зависимости, в которых вам действительно не нужен такой jUnit, в консоль OSGi, и у вас есть больше контроля над тем, как создается и развертывается ваш пакет.

У дня действительно есть отличное руководство, которое поможет вам создать проекты CQ с Eclipse. http://dev.day.com/docs/v5_2/html-resources/cq5_guide_developer/ch04s02.html

+0

Я могу добавить ссылки так, как вы описали, но зачем мне это делать вообще? Я думал, что, установив пакет в Felix, CRXDE будет знать об этом (ссылаться на него) при загрузке. Тем не менее, это не происходит. Даже используя этот метод для добавления a, я не могу найти пакеты Felix, но они заканчиваются тем, что добавляются из моей файловой системы, а не из исполняемого экземпляра CQ. Все библиотеки, показанные на моем пути сборки, поступают из {СЕРВЕР} _ {PORT} _ {HASH} местоположений, но материал, который я добавляю, исходит из таких вещей, как c: \ dir. Как найти пакет JUnit, который я установил в Felix? – Shawn

+0

Эта статья (http://dev.day.com/docs/en/cq/current/developing/developmenttools.html#How%2520to%2520Set%2520Up%2520the%2520Development%2520Environment%2520with%2520Eclipse) является более поздней, чем с которым вы связались, и в нем говорится: «CRXDE рекомендуется при разработке сложных приложений путем создания новых компонентов и пакетов Java». Я знаю, что всегда есть альтернативные способы делать что-то, но по этому вопросу я спрашиваю в контексте использования CRXDE. – Shawn