Методы тестирования EJB 3.1

В настоящее время я работаю с темой тестирования EJB в версии 3.1, и у меня есть только некоторый опыт работы с ней. Поэтому я взглянул на литературу и обнаружил три различных способа / метода тестирования EJB (версия 3.0 и новее).

1) Использование простых POJT (Plain Old Java Tests)

2) Использование встроенного контейнера

3) Тест приложения на сервере приложений

После того, как я разобрался в этих различных методах, я начал свое собственное исследование и выяснил некоторые возможности.

Для случая 1) такие инструменты, как JUnit или TestNG, почти идеальны, и для решения проблем с аннотациями можно использовать библиотеку EasyGloss. Для очень простых бобов EasyGloss не требуется. "Локальное" тестирование работает нормально, пока компоненту не нужен доступ к контекстам (например, sessionContext), не используются транзакции или перехватчики.

Я использую JBoss AS 7.1.1 и, насколько мне известно, этот сервер приложений не предоставляет встроенный контейнер. Поэтому я могу переключиться на Glassfish (что я не предпочитаю) или использовать некоторые альтернативы, такие как OpenEJB или Arquillian, для обработки тестов для случая 2).

Я знаю, что у вас, ребята, гораздо больше опыта и знаний по тестированию Jave EE и EJB. Поэтому я хочу спросить вас, не поделитесь ли вы своим опытом со мной и, возможно, дадите несколько советов и подсказок, расскажите подробнее или приведите пример кода эффективных тестов ejbs.

Изменить: Добавлено больше информации для случая 1).

2 ответа

Встроенный контейнер является частью EJB 3.1, поэтому даже JBoss AS 7 должен реализовать его.

Arquillian также является очень хорошим вариантом, и, поскольку AS 7 запускается так быстро, дополнительные издержки внешней AS невелики.

Вы также можете комбинировать Arquilluan со встроенным контейнером, который должен предложить AS 7.

Как указал Vineet, есть встроенный контейнер JBoss. Однако, если вы не используете специфичные для AS классы, не должно быть проблем при использовании встроенного контейнера Glassfish ( вот простой пример). Встроенные контейнеры особенно интересны, если вы интенсивно используете предоставленную инфраструктуру EJB; как вы упомянули перехватчики, транзакции и т.д.

При тестировании вашего приложения на сервере приложений, а ваши компоненты являются удаленными компонентами, вы можете протестировать их непосредственно через поиск JNDI в своем модульном тесте; Вы также можете интегрировать Remote Beans в качестве тестовых хуков. Тем не менее, Arquillian особенно интересен в случае, если вы хотите протестировать CDI или локальные компоненты, так как вы не можете получить к ним удаленный доступ.

Я думаю, что важно сравнивать инструмент / технологию, такую ​​как встроенный контейнер или Arquillian, с простым модульным тестированием. Есть ли большое преимущество? Есть ли какие-либо тесты, которые я не могу выполнить без инструмента? То, что что-то новое и классное, не означает, что вы обязательно извлечете из этого пользу:)

Другие вопросы по тегам