2016-10-03 2 views
4

фонUnit тестирование AEM 6,1 и насмешливо строп, JCR и OSGi

Привет,

Так что я недавно начал в компании с помощью AEM 6.1 и я также младший разработчик.

Когда я пару с моим приятелем (старшим разработчиком), он вообще ездит. Но не записывает модульные тесты, это меня задевает. Он объяснил, что сложно тестировать AEM.

Наш проект использует HTTP-запросы и ответы на запросы, структуру Osgi и большой Jcr-репозиторий, jsps, сервлеты и подключения к базе данных. Мы используем всевозможные шаблоны проектирования, создаем классы адаптеров ... И так далее.

Вопросы

Почему трудно создавать модульные тесты для AEM, когда насмехается рамки для строп, OSGi и Jcr?

Как я могу узнать об аппаратном тестировании AEM 6.1?

двигаться вперед ...

Я ищу ресурсы, чтобы иметь возможность создавать модульные тесты для AEM? Если возможно, можете ли вы указать ниже какие-либо ресурсы?

ответ

2

Я чувствовал то же самое, когда впервые начал развиваться в AEM. Со временем я попытался изменить это для своей компании, и теперь у нас есть среда, в которой мы тестируем наш код AEM.

Почему трудно проверить код AEM? Я думаю, что основные причины сводятся к двум точкам:

  1. Многие примеры Adobe представлены в виде JSP с встроенным кодом Java (скриптлеты). Код сценария не проверяется и не может использоваться повторно. Я думаю, что одна из причин, по которой вы так много видите от Adobe, заключается в том, что продукт позволяет разработчикам «накладывать» базовые функции. Встроенный код работает под «libs», но разработчики могут копировать код в libs и помещать его в «приложения», а затем изменять его - и эти изменения вступят в силу вместо существующего кода. С JSP, которые содержат скриптлеты, легко заменить код таким образом, потому что вы можете получить разметку вместе с кодом Java и по-прежнему изменять ее. Но если этот код Java был в какой-то другой библиотеке, как бы вы могли его заменить? Хотя это было бы возможно, было бы намного сложнее. Поэтому я думаю, что Adobe имеет много примеров кода, который показывает Java-код в сценариях. Но это плохая практика, независимо от причин этого. Вы не можете этого сделать, если хотите выполнить единичный тест. Так что не допускайте этого. Требовать от разработчиков поместить код в классы .java и включить его через теги (или другие подобные механизмы). Затем вы можете выполнить модульный тест кода - и более легко его повторно использовать.
  2. Большинство кода, который вы пишете для AEM, необходимо будет взаимодействовать с репозиторием, который использует AEM.Таким образом, вы неизбежно имеете зависимости от кода/пакетов, которые являются частью базовой установки AEM. Когда вы пытаетесь написать свои собственные классы .java, вы быстро обнаружите, что, если у вас нет таких же зависимостей от пути к классам для вашей среды разработки, все не будет компилироваться. Для более старых версий AEM не было предоставленного поставщиком способа получить эти знания. Но в последних версиях это - «Uber» .jar. Я думаю, что проблемы зависимостей сдерживают разработчиков. И они возвращаются к сценариям в JSP для своего кода Java. Если вы хотите, чтобы модуль тестировал ваш код AEM, вам придется извлечь все зависимости, которые у вас есть, в код, предоставленный AEM, и сделать его частью вашего проекта в среде IDE. Это не тривиальная работа, но это предпосылка для того, чтобы быть способным эффективно развиваться и тестироваться обычным способом в проекте IDE и непрерывной интеграции, как в других проектах Java.

Мы решили №2, создав «контейнер» .jar, который содержит все файлы .jar из нашего экземпляра AEM, который нам требуется для компиляции и тестирования тестового кода Java. Но недавние выпуски AEM обеспечивают это в Uber .jar, что делает эту задачу намного проще. Мы также используем Mockito для модульного тестирования кода Java. Это позволяет легко и мощно высмеивать классы Sling и AEM, от которых мы зависим. Мы используем его все время. Мы иногда также используем PowerMockito для некоторых насмешек.

Кроме того, не сложно ли тестировать Java-код, предназначенный для использования в AEM, чем для тестирования любого другого кода Java. Мы также добавили поддержку тестирования модулей JavaScript с использованием Karma и Jasmine - так же, что и для кода на стороне клиента.

Вот некоторые ресурсы, которые могут помочь:

1

Это зависит от кода, одного кода вы можете легко покрыть с помощью тестов, когда другие нет. Большим преимуществом является поддержка модульных тестов для такого «не тестируемого» кода (код, который был создан без тестов).

Здесь вы найдете библиотеки для Unit-tests link с примерами.

Также вы можете протестировать свой код с помощью smth, как Mockito (во многих случаях проще создавать mocks с Mockito, а не создавать JCR fixture from JSON file в библиотеке Sling mock).

0

Одна из основных проблем заключается в том, что uber jar запутан и, следовательно, он просто содержит интерфейсы API и классы. В результате вы должны издеваться над объектами AEM, которые довольно громоздки. Тем не менее, есть UNobfuscated uber jar, который предоставляется Adobe.

0

Письменные тесты для AEM не должны быть трудными, сообщество Apache Sling предлагает способы тестирования на разных уровнях, и поскольку AEM основан на Sling, мы можем использовать те же инструменты.

Checkout ссылки ниже: