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?

È stato utile?

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?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top