Использование Glassfish Embedded API в модульных тестах проекта Maven - PullRequest
1 голос
/ 20 ноября 2010

У меня есть проект Maven, запущенный на Glassfish 3.0.1 с этими зависимостями в pom.xml:

...
<dependency>
 <groupId>org.glassfish.extras</groupId>
 <artifactId>glassfish-embedded-all</artifactId>
    <version>3.0.1</version>
    <scope>test</scope>
</dependency>
<dependency>
 <groupId>junit</groupId>
 <artifactId>junit</artifactId>
 <version>4.8.2</version>
 <scope>test</scope>
</dependency>
<dependency>
 <groupId>javax</groupId>
 <artifactId>javaee-web-api</artifactId>
 <version>6.0</version>
 <scope>provided</scope>
</dependency>
...

Я пытался запустить модульные тесты с использованием API Glassfish Embedded, как упоминалось впервая зависимость, но она выдает ошибку каждый раз, когда я пытаюсь создать de EJBContainer.

тестовый класс:

...
@BeforeClass
public static void setUpClass() throws Exception {
    EJBContainer ejbC = javax.ejb.embeddable.EJBContainer.createContainer();
}
...

журнал ошибок:

javax.ejb.EJBException: No EJBContainer provider available
The following providers:
org.glassfish.ejb.embedded.EJBContainerProviderImpl
Returned null from createEJBContainer call.

 at javax.ejb.embeddable.EJBContainer.reportError(EJBContainer.java:186)
 at javax.ejb.embeddable.EJBContainer.createEJBContainer(EJBContainer.java:121)
 at br.com.code.seuticket.sms.bean.GatewayBeanClickatellImplTest.setUpClass(GatewayBeanClickatellImplTest.java:53)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:597)
 at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
 at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
 at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
 at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27)
 at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
 at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
 at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:62)
 at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:140)
 at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:127)
 at org.apache.maven.surefire.Surefire.run(Surefire.java:177)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:597)
 at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:345)
 at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1009)

У кого-нибудь есть опыт модульного тестирования проектов Maven с использованием Glassfish Embedded API?

Ответы [ 2 ]

1 голос
/ 25 ноября 2010

Ознакомьтесь с проектом Arquillian от JBoss.

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

Особые инструкции для Glassfish . Я использую его для запуска моего интеграционного теста с JUnit (и maven). Работает отлично. Детали управления встроенным контейнером абстрагированы, за исключением небольшой начальной конфигурации, которую они проведут в документах.

0 голосов
/ 25 мая 2016

Вы можете попробовать этот код, он работает для меня: я настраиваю свойства в соответствии со своей стандартной установочной флойдером Glassfish

  Map<String, Object> properties = new HashMap<>();
    properties.put(EJBContainer.MODULES, new File("target/classes/cd/espoirmur/ejb"));
    properties.put("installation.root", "C:\\Program Files\\glassfish-4.1");
    properties.put("instance.root", "C:\\Program Files\\glassfish-4.1\\glassfish\\domains\\domain1");
    properties.put("configuration.file", "C:\\Program Files\\glassfish-4.1\\glassfish\\domains\\domain1\\config\\domainEmbeded.xml");
    EJBContainer ec = EJBContainer.createEJBContainer(properties);
    System.out.println("--------------ejb container sucessfully created----------");
    Context ctx = ec.getContext();
    System.out.println("--------------ejb context successfull  sucessfully created----------");
enter code here
...