Тестирование компонентов EJB 3.0 - PullRequest
1 голос
/ 25 февраля 2009

У меня есть пара вопросов, касающихся интегрированного тестирования компонентов EJB 3.0 с использованием JUnit.

В ваших тестах JUnit вы можете внедрить в сессионные компоненты менеджеры локальных сущностей ресурсов и, следовательно, «симулировать» ejb-контейнер. Но что, если ...

  1. Что если вам нужно проверить, правильно ли обрабатываются атрибуты транзакции в ваших методах ejb? Можно ли это сделать вне контейнера? Если нет, то какой самый простой способ проверить это внутри контейнера?

  2. Что если вам нужно убедиться, что в каждом дБ есть записи о тестах в БД? Как бы вы заверили, что после выполнения теста (даже если он не пройден) БД очищена от тестовых данных?

Ответы [ 2 ]

2 голосов
/ 25 февраля 2009

Вы также можете использовать встраиваемый JBoss для модульного тестирования EJB, как описано в # 553031

Это не очень хорошее решение, но оно работает.

0 голосов
/ 25 февраля 2009

Если вы используете Maven или даже не используете, это может быть полезно . Типичный способ проверки транзакционной семантики - использование базы данных в памяти, такой как H2 или HSQLDB (Hypersonic). Таким образом, в действительности вы тестируете внутри очень легкого контейнера. Hibernate может быть настроен как ваша реализация JPA. Он сохранит данные в полнофункциональной реляционной базе данных, работающей полностью в оперативной памяти.

Что касается светильников, существует довольно много вариантов, одним из наиболее популярных из которых является DbUnit , но, по моему опыту, они сложнее, чем стоят. Я предпочитаю создавать свои собственные классы "строитель", которые устанавливают мои тесты с необходимыми объектами модели. Мне нравится, когда «сеттеры» конфигурации возвращают экземпляр компоновщика, чтобы я мог связывать вызовы вместе так:

  this.emf = Persistence.createEntityManagerFactory ("hibernate-hsqldb");
  Widget widget = new WidgetBuilder(this.emf).setAnOption(4).setAnother("test").build();

Обычно emf создается в методе setUp и закрывается в tearDown. Это полностью инициализирует базу данных между тестами.

...