Рекомендации по тестированию интеграции функций Eclipse

Я разрабатываю функцию Eclipse, состоящую из нескольких плагинов Eclipse, используя Equinox Declarative Services (DS) для объединения плагинов во время выполнения. Я хотел бы добавить интеграционные тесты для проверки конфигурации равноденствия.

В частности, я хочу проверить, что

  • компоненты службы связываются вместе как ожидалось
  • активируются пучки
  • плагины обмениваются информацией как ожидалось (см. Изменить 2)

Кроме того, я хочу, чтобы эта интеграция проверила часть моего процесса непрерывной интеграции с использованием сборки безгласного Eclipse PDE (как описано здесь и здесь).

Мой вопрос: Можете ли вы порекомендовать какие-либо рамки, инструменты или методы, которые облегчат этот тип тестирования интеграции в рамках ограничений, которые я определил?

Я нашел два вывода:

  • Spring Динамические модули включает в себя платформу для тестирования интеграции OSGi. Тем не менее, я не смог получить простой тест Spring DM для работы в Eclipse. Он жалуется, что "платформа уже запущена".
  • Pax Exam (ранее Pax Drone) - еще одна инфраструктура тестирования интеграции OSGi.

Изменить. Чтобы уточнить, каждый плагин имеет компонент службы OSGi, настроенный с XML файлом определения компонента. Ошибка в одном из этих файлов конфигурации не нарушит никаких зависимостей плагина и может легко остаться незамеченной до времени выполнения. Для обнаружения такого сбоя необходимо провести тестирование интеграции.

Изменить 2. До сих пор все, что я видел, похоже, подтверждает утверждение Uri (см. ниже), что функции Multi-plugin Eclipse не тестируются на уровне компонентов/продуктов. Я готов пойти без всесторонних интеграционных тестов, если я смогу, по крайней мере, автоматически проверить правильность связывания компонентов службы.

Мой подход (пока не работает):


In a JUnit test do
   For each bundle/plugin of interest
      Get the osgi Bundle object with org.eclipse.core.runtime.Platform.getBundle()
      Verify that the Bundle is active with Bundle.getState()
      Verify that the Bundle is using the expected services with Bundle.getServicesInUse()
      Verify that the Bundle has registered the expected services with Bundle.getRegisteredServices()

Я запускаю свой код с конфигурацией запуска Plug-in Test Eclipse, запуская свой продукт Eclipse в качестве "Программы для запуска". Когда тесты выполняются, я могу проверить, что пакеты активны, но компоненты службы не активируются, а методы getServicesInUse и getRegisteredServices возвращают значение null. Я загрузил класс из каждого пакета, если это была проблема с ленивой активацией, но это не помогло. Я также подтвердил, что все компоненты обслуживания являются "неотложными" компонентами, поэтому они должны быть активированы, как только их пакет активируется. Почему Equinox DS не делает свою магию?

Ответ 1

Мы написали нашу собственную небольшую схему выполнения тестов, основанную на сочетании с подходами: a) rcp bundletestcollector (http://rcpquickstart.com/2008/06/12/running-unit-tests-for-rcp-and-osgi-applications/) Это написано Паскалем Рапидко, одним из главных парней RCP. Он собирает тестовые классы из пакетов в рабочей среде OSGi.

b) рамки тестирования knopflerfish (http://knopflerfish.org/releases/2.1.1/knopflerfish_osgi_tests_2.1.1.zip) Регистрирует тестовые примеры как службы, которые могут быть выполнены тестовым бегуном. Существует также выход XML, который, к сожалению, немного отличается от формата XML ant junit.

Таким образом, мы можем выполнять интеграционные тесты, живущие в отдельных тестовых пакетах, а также тесты, которые ближе к классическим модульным тестам, и живут в фрагментах до тестируемых пакетов (см. http://rcpquickstart.com/2007/06/20/unit-testing-plug-ins-with-fragments/).