Как вы проводите модульное тестирование кода Java EE?

Я хочу спросить, как вы предпочитаете тестировать код Java EE?

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

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

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

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


person marabol    schedule 22.12.2009    source источник
comment
См. stackoverflow.com/questions/1733805/   -  person ewernli    schedule 22.12.2009
comment
Устаревший проект Antoher: sourceforge.net/projects/mockejb Последний выпуск: 4 сентября 2004 г.   -  person marabol    schedule 22.12.2009
comment
Есть эта статья Адама Бьена о модульном тестировании для JavaEE от 2011 г.   -  person Martin Schröder    schedule 15.01.2014


Ответы (4)


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

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

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

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

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

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

person Pascal Thivent    schedule 22.12.2009
comment
Я слышал, что проект Cactus вернулся к жизни с новым ведущим разработчиком Петром Тахчиевом. JSFUnit основан на Cactus. - person cetnar; 23.12.2009
comment
@cetnar О, это полезно знать! На самом деле, возможно, я был слишком сосредоточен на EJB3 и полностью забыл о JSF. Большое спасибо за эту информацию. - person Pascal Thivent; 23.12.2009
comment
Большое спасибо. Я думаю, что я создам cunstructors для всех моих EJB pojos, чтобы позволить инъекцию без какого-либо отражения. Груз интересен для интеграционного тестирования. Спасибо! - person marabol; 24.12.2009
comment
Есть ли какие-нибудь простые имитации / моделирования для JMS, TimerService и SessionContext? - person marabol; 24.12.2009
comment
и, таким образом, их можно относительно легко протестировать без каких-либо специальных приспособлений: но не EJB, у которых есть @PersistenceContext EntityManager? - person Raedwald; 25.02.2012
comment
@PascalThivent: 2011/08/05 - Jakarta Cactus был отправлен на пенсию. - person Martin Schröder; 15.01.2014

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

person Sundar    schedule 23.12.2009

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

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

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

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

person Harald Wellmann    schedule 11.05.2010

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

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

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

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

person Bryn    schedule 18.11.2011