Лучшие практики для тестирования интеграции функций Eclipse - PullRequest
10 голосов
/ 12 февраля 2009

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

В частности, я хочу убедиться, что

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

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

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

На данный момент я нашел два отведения:

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

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

Редактировать 2 : Пока что все, что я видел, подтверждает утверждение Ури (см. Ниже) о том, что функции 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()

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

1 Ответ

2 голосов
/ 18 мая 2009

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

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

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

...