2010-11-19 8 views
1

Ich habe ein Maven-Projekt auf Glassfish 3.0.1 mit diesen Abhängigkeiten in der pom.xml ausgeführt wird:Mit Glassfish Eingebettete API in Unit-Tests von Maven Projekt

... 
<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> 
... 

Ich habe versucht, Unit-Tests laufen mit die Glassfish Embedded API, wie in der ersten Abhängigkeit erwähnt, aber es gibt mir einen Fehler jedes Mal, wenn ich versuche, de EJBContainer zu erstellen.

Testklasse:

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

Fehlerprotokoll:

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) 

Hat jemand Erfahrung mit Unit-Tests Maven Projekte mit Glassfish Embedded API hat?

Antwort

1

Schauen Sie sich das Projekt Arquillian von JBoss.

Die Mission des Arquillian Projekt ist ein einfaches Testgeschirr , die entfernt Lebenszyklus und den Einsatz von der Test Logik alle Behälter abstrahiert zu schaffen, so dass Entwickler leicht eine breite Palette von Integrationstests für produzieren können ihre Enterprise Java-Anwendungen.

Spezifische instructions for Glassfish. Ich verwende es, um meinen Integrationstest mit JUnit (und Maven) auszuführen. Funktioniert super. Die Details zum Verwalten des eingebetteten Containers werden mit Ausnahme einer anfänglichen Konfiguration, die Sie in den Dokumenten durchgehen, abstrahiert.

+0

arquilian in Ordnung ist, wenn der Zweck Integrationstest zu machen. Um Unit-Test die richtige Lösung zu machen ist mock andere Schichten –

+2

Mit Tools wie Arquillian, um den eingebetteten Anwendungsserver Lebenszyklus, Shrinkwrap zu verwalten, um Applikationselemente logisch zu komponieren, gekoppelt mit In-Memory-Datenbanken, testen diese Tage durch die alten Barrieren von Begriffen wie Unit- und Integrationstests. Vielleicht brauchen wir einen neuen Begriff für sie. "echte Tests" oder "nützliche Tests" sind zwei Möglichkeiten, die einem einfallen: P –

0

können Sie diesen Code versuchen, es funktioniert für mich: i einstellen EIGENSCHAFTEN, nach meiner Glasfischen Standardinstallation floder

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