Подтвердить что ты не робот

Как вы unit test код Java EE?

Я хочу попросить ваш предпочтительный способ проверить код Java EE?

Я нашел только три проекта, которые пытаются помочь в тестировании модульных тестов в среде Java EE:

Так что интересно,

  • Есть ли какая-либо инфраструктура, помогающая писать (j) unit test для Java EE-кода?
  • Вы используете встроенные серверы Java EE, такие как jboss или glassfish v3?
  • Вы макетируете и вводите сами?

Спасибо большое...

4b9b3361

Ответ 1

Если по модульному тестированию вы имеете в виду... единичное тестирование (тестирование отдельного устройства), то на самом деле вам не нужна какая-либо конкретная структура, поскольку EJB3.0 представляет собой не что иное, как аннотированные POJO и, следовательно, можно относительно легко протестировать без любое специальное приспособление.

Теперь, если вы имеете в виду что-то еще - например, тестирование интеграции или функциональное тестирование - тогда да, инструменты могут помочь и упростить вещи (но вы действительно должны начать использовать правильную терминологию:) Предположим, что это то, что вы имеете в виду.

Во-первых, JUnitEE кажется мертвым и устаревшим, и я даже не уверен, что он имеет что-то для EJB3.x. Во-вторых, я не впечатлен поддержкой Java EE 5 Cactus и развертывание тестов Cactus является болезненным (я думаю, что Cactus был приятным для J2EE 1.4, но сейчас немного устарел). Таким образом, это оставляет нам Ejb3Unit, который, на мой взгляд, лучший вариант, особенно если вы хотите запустить из контейнерасильные > тесты, то есть без реального развертывания приложения (намного быстрее).

Если вы хотите запускать тесты в контейнере, тогда вы действительно можете использовать встроенный контейнер, и мои текущие предпочтения относятся к GlassFish v3, даже для Java EE 5 (возможно, я ошибаюсь, но я довольно разочарован временем начала последних выпусков JBoss, поэтому он не получает большого внимания). См. Сообщение GlassFish Embedded Reloaded, сервер приложений в кармане для примера кода (который вы можете использовать из своих тестов) или Использование плагина maven для встроенных стеклянных рыб v3 (если вы используете maven).

Другим вариантом было бы упаковать и развернуть ваше приложение с помощью Cargo, а затем запустить несколько тестов против развернутого приложения (с помощью Selenium или BDD-инструмент, например). Это может быть полезно, если вы хотите запускать сквозные тесты с помощью контейнера, который не предоставляет встроенного API.

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

Ответ 2

Поскольку вы заинтересованы в модульном тестировании, я рекомендую JUnit. Вы можете unit test методы в основных классах. Если у вас возникли трудности с написанием случаев unit test с использованием JUnit, то, вероятно, дизайн не является модульным и сильно связан. Сначала сосредоточьтесь на своих основных функциях и протестируйте его с помощью JUnit.

Ответ 3

Я столкнулся с одной и той же проблемой при выполнении интеграционных тестов на базе JUnit в контейнере Java EE 6 (точнее, Glassfish v3), и после многократного просмотра и поиска я не смог найти решение, которое действительно мне понравилось, поэтому я написал свой собственный, теперь опубликованный как jeeunit в Google Code.

Я бы не назвал это тестовой средой, на самом деле это всего лишь несколько классов, обеспечивающих клей между JUnit и Embedded Glassfish.

Общая идея похожа на Cactus, ваши тесты запускаются в контейнере и запускаются сервлетом извне.

jeeunit поддерживает JUnit 4, Glassfish v3, CDI и генерирует стандартные отчеты XML JUnit точно так же, как Ant или Maven Surefire (на самом деле я повторно использовал код из Ant для генерации отчетов).

Ответ 4

У меня было требование протестировать приложение CDI и написал пользовательский бегун JUnit, который запускает все за пределами веб-контейнера.

http://jglue.org/cdi-unit/

Он подходит для Java SE, а также поддерживает фиктивные области запроса, сеанса и беседы для тестирования веб-приложений.

Он маленький и быстрый, что отлично, когда у вас много модульных тестов.