Разница между Spring TestContext Framework и Jboss Arquillian - PullRequest
4 голосов
/ 07 февраля 2011

Моя компания разработала за последние 7 лет веб-приложение среднего / большого размера. Приложение использует Spring Framework (3.0), Hibernate (3.x) и Struts (1.x) среди других. К сожалению, мы не использовали никаких автоматических тестов. Теперь нам нужно добавить их, чтобы избежать ошибки регрессии и начать лучший жизненный цикл разработки. Следуя рекомендациям для этой тяжелой работы, я прочитал, что мы могли бы начать с теста gui с дымом, а затем добавить интеграционное тестирование перед добавлением модульного теста. Итак, мой вопрос: о тесте интеграции (в контейнере), в чем разница между Spring TestContextFramework и JBoss Arquillian? Я читал, что Arquillian будет поддерживать Spring в его окончательном выпуске (http://community.jboss.org/message/563768). Буду ли я иметь какие-то преимущества, используя его, когда он станет стабильным?

Спасибо, Стефано.

Ответы [ 3 ]

1 голос
/ 17 мая 2011

Я сам пользователь Arquillian, но я рекомендую вам придерживаться решения Spring.Хотя в конечном итоге он будет независим от контейнеров, сейчас усилия сосредоточены на Java EE.Ваша работа кажется достаточно сложной, и я бы сейчас не рекомендовал Aquillian.

Однако, чтобы устранить некоторую путаницу, вы можете запустить встроенные тесты на Arquillian.Он может загружать встроенные серверы Glassfish или JBoss AS и запускать тестирование с использованием «реальной вещи» вместо фиктивных или альтернативных реализаций.JPA, Interceptors, JTA, XA Datasources, JMS, JSF, Servlet.Все доступно - батареи включены;)

Кроме того, вы можете запустить экземпляр JBoss на заднем плане и запустить тест удаленно.Arquillian заботится о цикле развертывания / тестирования / отмены развертывания - и он невероятно быстр!

1 голос
/ 07 декабря 2016

Я никогда не использовал ни одного из них, но вот моя сумма документации:

## Тесты интеграции Spring ##

Spring позволяет выполнять некоторыеинтеграционные тесты без необходимости развертывания на сервере приложений .

Поддержка Spring для модульного тестирования и интеграционное тестирование обеспечивается Spring TestContext Framework , который не зависит от используемой платформы тестирования (JUnit, TestNG и т. Д..).

TestContext Framework обеспечивает:

  • согласованную загрузку Spring ApplicationContext s и WebApplicationContext s, а также кэширование этих контекстов. [1]

  • дополнительно настраивает экземпляры ваших тестовых классов с помощью внедрения зависимостей. [2]

  • обеспечивает управление транзакциями для тестов транзакций: платформа создаст и откатит транзакцию для каждого теста.

  • предоставляет абстрактные классы, которые могут быть расширены разработчиками для простого кодирования классов тестовых случаев JUnit или TestNG.

## Arquillian ##

Arquillian выполняет интеграционные тесты в реальной среде выполнения , жизненным циклом которой управляет Arquillian.Действительно, в Arquillian ваши интеграционные тесты либо выполняются внутри контейнера , либо взаимодействуют с контейнером в качестве клиента.

Контейнер может быть:

  • anвстроенный или удаленный контейнер сервлетов (например, Tomcat, Jetty),
  • сервер приложений Java EE (например, GlassFish, JBoss AS, Embedded GlassFish),
  • среда Java SE CDI
  • или любая другая реализованная реализация контейнера

Arquillian:

  • управляет жизненным циклом контейнера (запуск / остановка),

  • объединяет тестовый класс с зависимыми классами и ресурсами в развертываемый архив,

  • расширяет тестовый класс (например, разрешает инъекции @Inject, @EJB и @Resource),

  • развертывает архив для тестирования (развертывание / отмена развертывания),

  • фиксирует результаты и сбои.

# Как это работает #

Arquillian предоставляет пользовательский тестовый прогон fили JUnit и TestNG.

  1. Когда вы запускаете свои тесты, этот пользовательский тестовый прогон обнаружит объявление @RunWith Arquillian.
  2. Таким образом, пользовательский тестовый прогон переключит управлениежизненный цикл выполнения теста от среды модульного тестирования (JUnit или TestNG) до Arquillian.

  3. Для каждого теста:

    1. Arquillian будет использовать ShrinkWrap для создания "микроархив ".Элемент управления classpath, разрешенный ShrinkWrap, позволяет Arquillian декларативно определять пользовательский архив Java EE, который инкапсулирует тестовый класс и его зависимые ресурсы, но не более того!Это дает вам детальный контроль над тем, что вы тестируете, и какие ресурсы доступны во время выполнения теста.
    2. Arquillian развертывает каждый «микроархив» в целевом контейнере (который настроен в профиле maven), я полагаю, один за другим.
    3. Затем он согласовывает выполнение тестовых методов и захватываетрезультаты теста с использованием удаленной связи с сервером.
    4. Наконец, Arquillian отменяет развертывание архива теста.
1 голос
/ 07 февраля 2011

Я никогда не использовал Arquillian, но, похоже, он сосредоточен на тестировании EJB с акцентом на развертывание в работающий контейнер. Если ваше приложение основано на Spring (+ Hibernate), поддержка Spring Test, вероятно, является лучшим выбором.

В тестовом примере вы можете запустить часть контекста вашего приложения (только небольшую часть или почти целое приложение) с имитацией базы данных в памяти. Вам не нужен работающий контейнер, так как Spring в основном самодостаточен. Тестировать действия Struts 1.x сложнее, но, думаю, Аркилиан тоже вам не поможет.

Также, если вас беспокоит стабильность программного обеспечения, Arquillian, похоже, сейчас в альфа-версии. Но я бы определенно дал шанс, что мне придется протестировать приложение на основе EJB. Для приложений Spring с контекстным кэшированием, разграничением транзакций в тестах и ​​т. Д. TestContext Framework - лучший выбор.

Примечание: рассмотрите возможность использования TestNG вместо JUnit, поскольку с TestContext это выглядит намного лучше, например. у вас есть доступ к бинам Spring в методах установки / разрыва (статический в JUnit).

...