JSFUnit и JBoss Arquillian тест рамка для JavaEE выглядит очень перспективно, но , по моему опыту , есть веские причины , почему они только бета и альфа — версия. Может быть, вы можете заставить их работать, но вы должны выбрать правильную версию каждой зависимости — на этом этапе многое меняется между отдельными версиями — и повезло, что вы нашли один из «счастливых путей». В конце концов я почти получил JSFUnit 1.0.0.Beta1, работающий с Arquillian 10.0.0.Alpha4 и Glassfish-Embedded 3.0.1, но не удалось развернуть из-за странного исключения синтаксического анализа веб-фрагмента arquillian. Я фиксирую эту неудачу, чтобы помочь тем, кто борется с этим тоже.
Существуют следующие фатальные ограничения:
- JSFUnit 2.0.0.Beta1 — последняя доступная версия ( Beta2 должна была быть выпущена в апреле, но ее не было, и у нее все еще открыт один выпуск — JSFUNIT-275 ]; 2.0.0. Финал должен быть 1 июля, но с учетом задержки Beta2 и без прогресса в финальной версии, это будет, конечно, намного позже)
- JSFUnit 2.0.0.Beta1 требует Arquillian 1.0.0.Alpha4, поддержка Alpha5 поставляется с Beta2.
- Выбор контейнера:
- Tomcat 6 поддерживает только сервлет 2.5, в то время как JSFUnit требует 3.0, поскольку он использует веб-фрагменты; однако это, кажется, исправлено в JSFUNIT 1.0.0.Beta2, см. JSFUNIT-273
- Я не смог получить JBoss Embedded (6.0.0.Final), он пытался загрузить квазиллионы зависимостей и в итоге потерпел неудачу из-за некоторых несовпадений версий
- Embedded GlassFish (GF) — версия 3.1 имеет другой API, который поддерживается только начиная с Arq. Alpha5, и развертывание до 3.0.1 завершается неудачно из-за « SAXParseException: src-resol: невозможно преобразовать имя« xml: lang »в (n) компонент« объявления атрибутов ». «, Решено только в GF 3.1 ( GLASSFISH-13261 ). Удивительно, но я получил 3.0.1, работающую с другим проектом, но там он потерпел неудачу из-за несоответствия библиотек JSF (в противном случае это также может привести к этой проблеме).
Моя (не очень хорошо работающая) конфигурация Ivy была:
...
<dependency org="org.jboss.jsfunit" name="jsfunit-arquillian" rev="2.0.0.Beta1" conf="webtest" />
<dependency org="org.jboss.arquillian" name="arquillian-junit" rev="1.0.0.Alpha4" conf="webtest" />
<dependency org="org.jboss.arquillian.container" name="arquillian-glassfish-embedded-3" rev="1.0.0.Alpha4" conf="webtest" />
<dependency org="org.glassfish.extras" name="glassfish-embedded-all" rev="3.0.1" conf="webtest" />
...
Прилагаемый файл settings.xml с репозиториями:
<ivysettings>
<settings defaultResolver="all_repositories" />
<resolvers>
<chain name="all_repositories">
<ibiblio name="ibiblio" m2compatible="true" />
<ibiblio name="jboss" m2compatible="true" root="https://repository.jboss.org/nexus/content/repositories/releases" /> <!-- JSFUnit etc. -->
<ibiblio name="sunJars" m2compatible="true" root="http://download.java.net/maven/2" /> <!-- javax.* APIs etc. -->
<ibiblio name="glassfish-embedded" m2compatible="true" root="http://download.java.net/maven/glassfish/" />
</chain>
</resolvers>
</ivysettings>
На версиях JSF
Похоже, что вы можете тестировать только приложения JSF 2.0 (надеюсь, вы сможете протестировать их после выхода Beta2); если вы попытаетесь протестировать приложение JSF 1.2, вы столкнетесь с конфликтующими API, что приводит, например, к IllegalArgumentException: javax.faces.context.ExceptionHandlerFactory .
Совет: Увеличение регистрации во встроенном Glassfish
GF использует java logging => скопировать куда-нибудь glassfish / domains / domain1 / config / logging.properties, замените INFO на FINE и запустите тест со следующими настройками:
-Djava.util.logging.config.file=/Users/jholy/iterate/projects/viatravel/ViaOnline/target/glassfish/config/logging.properties
Если ваш тест не пройден из-за IllegalStateException: Ошибка запуска теста по адресу http: // localhost: 8181 / test / ArquillianServletRunner?…. Продолжал получать 404 с. тогда, вероятно, развертывание вашего приложения не удалось, и вы должны повысить уровень ведения журнала и проверить проблему.
Некоторые записи, представляющие интерес:
- ClassName = com.sun.enterprise.deployment.node.web.WebCommonNode; MethodName = addDescriptor; | Добавление веб-компонента…
- javax.enterprise.system.tools.deployment.org.glassfish.deployment.common — здесь могут отображаться некоторые важные исключения
- javax.enterprise.system.container.web.com.sun.enterprise.web | …; ИмяКласс = com.sun.enterprise.web.WebModuleListener; MethodName = configureJsp; | sysClasspath для __default-web-модуля:
… jsfunit-arquillian-2.0.0.Beta1.jar:… - Был NPE, который, возможно, на самом деле в порядке: ClassName = org.glassfish.deployment.common.InstalledLibrariesResolver; MethodName = getInstalledLibraries; | InstalledLibrariesResolver: произошло исключение: java.lang.NullPointerException | #]
связи
- Конфигурация встроенного контейнера Glassfish 3.0.1 для Arquillian Alpha4 (используйте GF 3.0.1 вместо 3.0.1-b2, упомянутого там, чтобы избежать « SAXParseException: src-resol: невозможно преобразовать имя« xml: lang »в a (n)» объявление атрибута ‘component. ‘ в web-фрагменте arquillian-protocol.jar.
- Начало работы с JSFUnit 2.0.0 (включая тестовый проект)