test moduli EAR maven e EJB dipendenze
-
19-09-2019 - |
Domanda
Stiamo costruendo i nostri progetti EAR e EJB con Maven. Essa si baserà tutti i progetti EJB e quindi vengono utilizzati come la dipendenza per EAR, in modo che siano confezionati in file EAR alla fine.
Il problema è che ogni progetto EJB ha test JUnit che controllano l'EJB. Per ora questi test non sono molto utili perché cercano di connettersi al server di applicazione (JBoss) ed eseguire i metodi da interfaccia EJB.
C'è un modo per costruire l'EJB, costruire e distribuire l'EAR e quindi eseguire tutti i test da parte di tutti gli EJB contro l'application server?
Per ora sto simulando AP nei test da iniziazione classi EJB-Attuazione e manualmente "iniettando" iniezioni (someEJBImpl.em = EntityManager ....) che è molto fastidioso, perché abbiamo un enorme dipendenze tra loro e io avere per gestire le transazioni da solo.
C'è un altro modo di gestire i test EJB contro il Real AP? Può essere distribuire EAR dopo ciascun modulo EJB con sottoinsieme di moduli EJB già costruito? Ma come?
Può essere impostato per eseguire i test Maven di tutti i moduli EJB come parte del test EAR? Come fare questo?
Soluzione
Questo non è un problema semplice, e non c'è una risposta semplice. Speriamo che questi puntatori sarà di aiuto.
Credo che la vostra strategia migliore è quella di separare i test nei test di unità originali -. Quelli che possono essere eseguiti in isolamento, senza un contenitore, e spostare i test che richiedono il contenitore in test di integrazione
È possibile utilizzare Ejb3unit per massimizzare i test che non richiedono un contenitore per l'esecuzione. Aiuta finta alcune delle dipendenze complicate. Ejb3unit ha un plugin Maven, vedere la per i dettagli di collegamento al proprio repository Maven.
Altri quadri di scherno, come JMock possono anche aiutare. Si può prendere in giro le classi e interfacce se si utilizza un ClassImposteriser .
Per i test che hanno bisogno di un contenitore EJB, è possibile configurare questi per l'esecuzione come test di integrazione , può avere senso per spostarli in un progetto separato, a seconda delle relazioni tra i vostri progetti EJB.
E 'possibile lanciare un esempio Jetty incorporato nel tuo JUnit test e programmaticamente aggiungono servlet ad esso. Naturalmente Jetty non è un contenitore EJB, Avrete bisogno di un contenitore EJB come OpenEJB .
Per configurare OpenEJB in Jetty, utilizzare una configurazione simile a questo:
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<configuration>
<scanIntervalSeconds>5</scanIntervalSeconds>
<contextPath>/example</contextPath>
<systemProperties>
<systemProperty>
<name>java.naming.factory.initial</name>
<value>org.apache.openejb.client.LocalInitialContextFactory</value>
</systemProperty>
<systemProperty>
<name>java.naming.factory.url.pkgs</name>
<value>org.mortbay.naming</value>
</systemProperty>
</systemProperties>
</configuration>
</plugin>
Le dichiarazioni di dipendenza per OpenEJB sarebbero:
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
<version>3.1</version>
<scope>test</scope>
</dependency>
È inoltre possibile utilizzare selenio per aiutare con i test funzionali (assumendo che tu abbia fino a questo punto) , ecco una utilizzando Selenio, Jetty e OpenEJB di farlo.
Altri suggerimenti
Per JBoss si potrebbe provare la Maven Cargo plug . Attualmente sto testando con JBoss 5.1 e ancora lavorando su di esso:
Dove posso trovare una completa plug esempio Maven Cargo per i test EJB?