Я пытался настроить свое приложение так, чтобы я мог единица тестировать, это весь день - 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?
(...) Стандартным рекомендуемым решением является добавление артефакта 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
действительно хорош и отлично подходит.