В настоящее время я работаю над новой системой контроля версий в рамках проекта последнего года обучения в университете. Идея состоит в том, чтобы сделать его легко адаптируемым и подключаемым.
Мы используем фреймворк OSGi (реализация Equinox) для управления нашими плагинами. Моя проблема в том, что я не могу найти простой и легкий в использовании метод для тестирования пакетов OSGi.
В настоящее время мне нужно собрать пакет с помощью Maven, а затем выполнить тестовую привязку. Я ищу что-то вроде средства запуска тестов JUnit для Eclipse, так как это сэкономит мне кучу времени.
Есть ли быстрый и простой способ протестировать комплекты OSGi?
Обновлено: Мне не нужно что-то для тестирования подключаемых модулей Eclipse или компонентов графического интерфейса, просто пакеты OSGi.
EDIT2: есть ли фреймворк, поддерживающий JUnit4?




Spring Dynamic Modules имеет отличную поддержку тестирование пакетов OSGi.
Кроме того, SpringDM, похоже, не поддерживает JUnit4, это правильно?
NoClassDefFoundError возникает, когда jvm не может найти файл .class во время выполнения, хотя он был доступен во время компиляции. Так что это не ошибка SpringDM, вам просто нужно снова создать свой проект. Если вы используете сборку maven через maven, или если в ur eclipse включена настройка автоматической сборки, просто внесите небольшие изменения в java-файл ur и сохраните его. После этого U не получит эту ошибку.
Eclipse имеет тип конфигурации запуска для запуска тестов JUnit в контексте приложения Eclipse (например, OSGi):
Это больше похоже на тестирование подключаемых модулей eclipse. Мой вопрос был непонятным?
Давным-давно, но для полноты: плагины Eclipse представляют собой пакеты OSGi, поэтому вы можете тестировать пакеты OSGi с помощью простого Eclipse SDK.
Если вам нужно протестировать компоненты графического интерфейса, я обнаружил, что SWTBot выполняет свою работу.
Спасибо, но мне не нужно тестировать компоненты графического интерфейса или плагины Eclipse.
На OPS4J (ops4j.org) есть специальная среда тестирования OSGi с открытым исходным кодом под названием Пакс Дрон.
Возможно, вы захотите взглянуть на Pax Drone ([http://wiki.ops4j.org/confluence/x/KABo]), который позволяет вам использовать все версии Felix, а также Equinox и Knopflerfish в ваших тестах.
Ваше здоровье, Тони
Мммм ... Кажется, Maven не может найти Pax Drone, и я не могу найти никаких альтернативных репозиториев, упомянутых в вашей ссылке. Любая помощь?
Спасибо за указатель. Я только что обновил сайт для этого. К вашему сведению: вы можете найти это здесь: repository.ops4j.org/maven2
Похоже, сайт не работает. Кто-нибудь еще пользуется этим фреймворком?
Похоже, что Pax Exam - это новая версия, см. Ответ @ l10i.
Договор - это контрактный (тестовый) фреймворк, который довольно академичен, но имеет несколько хороших идей. По нему опубликованы статьи, и люди, которые сейчас работают над его улучшением.
Совсем недавно вам стоит взглянуть на Pax Exam: http://team.ops4j.org/wiki/display/paxexam/Pax+Exam
Это текущие усилия OPS4J, связанные с тестированием.
Их сайт сильно не работает. Сайты GitHub: Экзамен Pax 1, Экзамен Pax 2, Учебник для экзамена Pax 2
Вот некоторые инструменты, которые еще не упоминались:
Я использую Тихо, инструмент для использования Maven для создания подключаемых модулей Eclipse. Если вы создаете тесты внутри своих собственных подключаемых модулей или фрагментов подключаемых модулей, Tycho может запускать каждый набор тестов внутри своего собственного экземпляра OSGi со всеми его необходимыми зависимостями. вступление и дополнительная информация. У меня это работает очень хорошо.
jUnit4OSGI выглядит прямолинейно. Вы создаете подклассы OSGiTestCase и получаете такие методы, как getServiceReference() и т. д.
Конструктор плагинов, автономная система сборки для пакетов OSGi / подключаемых модулей Eclipse, имеет фреймворк для запуска тестов, называемый Autotestsuite. Он запускает тесты в контексте среды OSGi после этапа сборки. Но, похоже, он не поддерживался в течение нескольких лет. Я думаю, что многие проекты Eclipse переходят с Pluginbuilder на Tycho.
Другой вариант - запустить экземпляр контейнер OSGi в ваш модульный тест, который вы запускаете напрямую, как объяснено здесь.
Вот кто-то, кто написал маленький сборщик тестов пакетов, который ищет тесты JUnit (3) и запускает их.
Для модульных тестов используйте среду EasyMock или создайте свои собственные реализации требуемых интерфейсов для тестирования.
Среда выполнения тестов ProSyst - полезный инструмент для тестирования пакетов OSGi. Он также поддерживает тесты JUnit как одну из возможных тестовых моделей.
За последние пару лет Тихо - новая система сборки на основе Maven для OSGi - стала довольно популярной среди Eclipse Foundation. Эта структура также включает метод использования Maven Surefire для тестирования пакетов OSGi на отдельных тестовых стендах ...
Думаю, мы столкнулись с той же проблемой и приняли собственное решение. Есть разные части решения:
С помощью инструментов вы можете выполнять TDD, а письменные тесты всегда запускаются внутри фазы интеграции maven. Рекомендуется использовать eclipse с m2e и maven-bundle-plugin, так как в этом случае target / classes / META-INF / MANIFEST.MF восстанавливается, как только вы сохраняете класс в своем источнике, чтобы вы могли перетащить проект и отпустить в окно развертывания. Пакеты OSGi, которые вы разрабатываете, не обязательно должны иметь какие-либо специальные функции (например, быть плагином eclipse или чем-то еще).
Все решение - OpenSource. Вы можете найти руководство на http://cookbook.everit.org
Как насчет bnd-testing-maven-plugin?
Это позволяет запускать JUnit внутри работающего контейнера, такого как Felix или Equinox. Если вы использовали BNDTools для eclipse, это очень похоже, но только maven без eclipse и без пользовательского интерфейса.
https://github.com/bndtools/bnd/tree/master/maven/bnd-testing-maven-plugin
также посмотрите на архетип Effectiveosgi для maven. Это даст вам хорошую отправную точку для создания вашего проекта или просто добавления тестов.
https://github.com/effectiveosgi
Ссылка на решение приветствуется, но убедитесь, что ваш ответ полезен и без нее: добавить контекст вокруг ссылки, чтобы ваши коллеги-пользователи имели некоторое представление о том, что это такое и почему оно есть, а затем процитируйте наиболее релевантную часть страницы, на которую вы ссылаетесь. если целевая страница недоступна. Ответы, которые представляют собой не более чем ссылку, могут быть удалены.
Полагаю, есть много способов протестировать компоненты OSGi. Один из способов проведения тестирования - использовать Robot Framework. Я сделал свои тесты с помощью Robot Framework и установил удаленные библиотеки в OSGi или попросил их взаимодействовать с компонентами OSGi-test через сокеты, и робот будет разговаривать с этими модулями и запускать тесты через них.
Итак, в основном ваши OSGi-модули должны иметь интерфейсы, которые что-то делают и производят какой-то вывод. Итак, в моей настройке у меня были тестовые компоненты, которые будут выполнять служебные вызовы к фактическому OSGi-компоненту, а затем будет служба прослушивания, которая будет улавливать события / служебные вызовы (сделанные тестируемым модулем), и эти результаты могут спросит робот. Таким образом, вы можете разделить массивную систему на небольшие компоненты и запустить систему в производстве / производстве, например, в среде, и автоматически протестировать ее на уровне компонентов или одновременно протестировать некоторые из реальных компонентов.
Используя SpringDM, я просто получаю следующее: junit.framework.AssertionFailedError: Exception in constructor: testOSGiStart (java.lang.NoClassDefFoundError: org / apache / commons / logging / LogFactory Есть идеи? Я добавил общее ведение журнала в путь сборки, Кстати.