Лучший подход к тестированию интеграции веб-приложения Flex / Java через Maven? - PullRequest
3 голосов
/ 17 октября 2010

Я работаю над проектом, который разрабатывает веб-приложение со 100% гибким пользовательским интерфейсом, который взаимодействует через Blaze с бэкэндом Java, работающим на сервере приложений. Команда уже создала много модульных тестов, но создала только интеграционные тесты для модуля персистентности. Теперь нам интересно, как лучше интегрировать тестирование других частей. Вот модули Maven, которые у нас сейчас есть, я считаю, что это очень типичный дизайн:

Сторона сервера:

1) модуль домена Java - здесь есть только модульные тесты

2) модуль персистентности Java (DAO) - на данный момент здесь есть только интеграционные тесты, которые взаимодействуют с действующей базой данных для тестирования DAO, здесь нет ничего для модульного тестирования

3) сервисный модуль Java - сейчас он имеет только модульные тесты

Клиентская сторона:

4) сервисный модуль Flex, который упакован как SWC и взаимодействует с бэкэндом Java - в настоящее время он вообще не имеет тестов

5) клиентский модуль Flex, который реализует пользовательский интерфейс Flex поверх служебного модуля Flex - в настоящее время он имеет только модульные тесты (мы использовали MATE для создания слабо связанного клиента без логики в представлениях).

Эти 5 модулей упакованы в WAR-файл, который можно развернуть на сервере приложений или в контейнере сервлетов.

Вот 4 вопроса, которые у меня есть:

  1. Должны ли мы добавить интеграционные тесты в сервисный модуль или это избыточно, учитывая, что модуль persist имеет интеграционные тесты, а сервисный модуль уже имеет модульные тесты? Также кажется, что интеграционное тестирование модуля Flex-Services является более высоким приоритетом и будет одновременно выполнять модуль служб.
  2. Нам нравится идея сохранения интеграционных тестов в своих модулях, но есть круговая связь с сервисным модулем Flex и модулем WAR. Интеграционный тест для сервисного модуля Flex не может выполняться без сервера приложений, поэтому эти тесты будут иметь прийти после войны, да?
  3. Что такое хорошая технология для интеграционный тест Flex клиентские интерфейсы (например, что-то вроде Селен, а для Flex)?
  4. Должны ли мы поставить окончательные интеграционные тесты в Модуль WAR или создать отдельный модуль тестирования интеграции, который собирается после WAR?

Любая помощь / мнения с благодарностью!

Ответы [ 2 ]

1 голос
/ 11 июня 2011

Прежде всего, просто некоторые разъяснения. Когда вы говорите «4) Модуль сервисов Flex, упакованный как SWC», вы подразумеваете, что библиотека сервисов Flex, которую я собираю, загружается как RSL. Это важная разница, чем написание сервисов в качестве модуля времени выполнения, потому что последний может (и обычно будет) создавать экземпляр самого контроллера сервисов и распределять подключение сервисов к другим модулям. Ваша альтернатива, просто библиотека, которую вы встраиваете в каждый модуль, означает, что все они создают свой собственный экземпляр сервисного контроллера. Вам лучше поместить логику сервисов в модуль, который приложение может загрузить до загрузки других модулей, и управлять движением сервисов между ними.

Например.

Application.swf - запускает, инициализирует контейнер IoC, загружает Services.swf, внедряет любые необходимые ему зависимости

Services.swf загружает, устанавливает соединение с сервером, управляет необходимым набором сервисов

Application.swf добавляет управляемые экземпляры из Services.swf в свой контейнер (используя некоторую форму контекстной осведомленности для предотвращения конфликтов)

Application.swf загружает ModuleA.swf, внедряет все необходимые зависимости

Модуль ModuleA.swf загружает (имеет перечисленные зависимости, полученные из Services.swf, внедренные), использует эти зависимости для связи со службами, которые ему необходимы.

Тем не менее, придерживаясь вашей нынешней структуры, я отвечу на ваши вопросы максимально точно.

  1. Что вы хотите проверить в интеграции? То, что ваши услуги там и возвращают то, что вы ожидаете, я собираю. Таким образом, если вы используете удаленные объекты в BlazeDS, вы можете написать тесты, чтобы убедиться, что вы можете найти конечную точку, найти каналы, место назначения (назначения), что все удаленные методы возвращаются, как и ожидалось. Команда сервера проверяет хранилище данных (от них до БД и обратно), но вы проверяете, что договор между вашим клиентом и сервером все еще выполняется. Этот контракт предназначен для любых допущений - таких как объекты значений, возвращаемые в полезных нагрузках, существующие удаленные методы и т. Д. И т. Д.

  2. (см. № 4 ниже). Тесты должны быть в их модуле, однако я бы сказал, что у вас действительно должен быть модуль для обслуживания (вместо библиотеки, как я предлагал выше). В любом случае, да, все же разверните артефакты тестирования на локальном веб-сервере (используя Jetty или какой-либо другой) и убедитесь, что цель интеграционных тестов зависит от используемого вами упаковщика WAR.

  3. Я считаю, что некоторые разработчики обмениваются пользовательским интерфейсом / функциональным тестированием с интеграционным тестированием. Несмотря на то, что вы действительно можете выполнять их вместе, в Flex все еще есть место для автоматизированных интеграционных тестов, где загружается веб-сервер и проверяются основные службы, чтобы убедиться, что они существуют и возвращают то, что требуется. Для пользовательского интерфейса / функциональных тестов Adobe поддерживает хороший набор ресурсов: http://www.adobe.com/products/flex/related/#ftesting. Для интеграционных тестов, как я уже говорил,

  4. Интеграционные тесты должны иметь свою собственную цель, которая зависит от упакованного проекта WAR.

1 голос
/ 18 октября 2010

Больше подсказка, чем сильный ответ, но, возможно, посмотрите на fluint (ранее dpUInt ) и Непрерывная интеграция с Maven, Flex, Fliunt и Hudson сообщение в блоге.

...