поблочное тестирование EJBs со Знатоком 2 и Glassfish 3

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

У меня есть стандартное веб-приложение Знатока, настроенное в NetBeans 6.9. Я автоматически генерировал модульный тест на один из EJBs, но каждый раз, когда я иду для выполнения его, я получаю сообщение об ошибке:

Testcase: initializationError(com.example.ExampleTest): Caused an ERROR
Absent Code attribute in method that is not native or abstract in class file javax/ejb/embeddable/EJBContainer
java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/ejb/embeddable/EJBContainer
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)

Я исследовал этого до смерти, и я вполне уверен, проблема состоит в том, что мой англичанин в настоящее время указывает на банку, которая содержит только API


            javax
            javaee-web-api
            6.0
            provided
        

Не и реализация, которая может использоваться для того, чтобы запустить тесты. Я вполне уверен, тест перестал работать в методе, отмеченном с @BeforeClass, когда он пытается выполниться

container = EJBContainer.createEJBContainer();

Стандартное рекомендуемое решение состоит в том, чтобы добавить glassfish-embedded-all артефакт как первую зависимость проекта с тестовым объемом


            org.glassfish.extras
            glassfish-embedded-all
            3.0.1
            test
        

Я могу найти пакет Знатока для этого артефакта здесь: http://download.java.net/maven/glassfish/, но Nexus не распознает этот каталог или любой из подкаталогов как Знаток 2 репозитория. Я предполагаю, что мог загрузить банку и вручную установить ее в Nexus, но это, кажется, побеждает, кто указывает установки Nexus.

Так, есть ли репозиторий Знатока, который Nexus сможет индексировать, чтобы дать мне glassfish-embedded-all артефакт? Несколько сообщений, которые я прочитал упомянутый, что корректный артефакт для теперь использования является javax.ejb, но у меня больше не было удачи при нахождении этого.

Поскольку Вы, вероятно, предположили, что я абсолютно плохо знаком с поблочным тестированием и довольно плохо знаком с JEE6 в целом; это - даже корректный способ пойти о поблочном тестировании EJBs?

11
задан wobblycogs 5 August 2010 в 14:35
поделиться

1 ответ

(...) Стандартным рекомендуемым решением является добавление артефакта glassfish-embedded-all в качестве первой зависимости проекта с областью тестирования

Действительно, вам нужна такая реализация, как glassfish-embedded-all или glassfish-embedded-web , если вы используете только веб-профиль, что похоже на ваш случай (я не знал, что веб-профиль был предоставляя, кстати, EJBContainer ).

И чтобы быть точным, этот артефакт не обязательно должен быть "первой" зависимостью, но он должен быть объявлен перед артефактом javaee-api .

Итак, есть ли репозиторий Maven, который Nexus сможет проиндексировать, чтобы получить артефакт glassfish-embedded-all?

Мне не удалось воспроизвести проблему с http://download.java.net/maven/glassfish/ , но похоже, что в репозитории JBoss Nexus он есть (вероятно, потому, что они используют его в ] Аркиллиан ):

<repository>
  <id>jboss-public-repository-group</id>
  <name>JBoss Public Maven Repository Group</name>
  <url>https://repository.jboss.org/nexus/content/groups/public</url>
</repository>

это вообще правильный путь для EJB-компонентов модульного тестирования?

Модульные тесты обычно выполняются вне контейнера и изолированно (с использованием фреймворка Mocking), поэтому я бы не стал называть это модульное тестирование. Но для интеграционного / функционального тестирования (в контейнере) API EJBContainer действительно хорош и отлично подходит.

См. Также

13
ответ дан 3 December 2019 в 08:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: