2009-07-27 13 views
7

Estamos construyendo nuestros proyectos EAR & EJB con maven. Construirá todos los proyectos EJB y luego se usarán como dependencia para EAR, por lo que se empaquetarán eventualmente en el archivo EAR.Módulo Maven EAR y pruebas de dependencias EJB

El problema es que cada proyecto EJB tiene pruebas junit que controlan el EJB. Por ahora, estas pruebas no son muy útiles porque intentan conectarse al servidor de aplicaciones (jboss) y ejecutar métodos desde la interfaz EJB.

¿Hay alguna forma de que pueda construir los EJB, construir e implementar el EAR y luego ejecutar todas las pruebas de todos los EJB contra el servidor de aplicaciones?

Por ahora estoy simulando AP en pruebas por iniciación EJB-Implementación de clases e inyecciones manuales "inyectables" (algunasEJBImpl.em = EntityManager ....) que es muy molesto, porque tenemos una gran dependencia entre ellas y Tengo que manejar las transacciones por mi cuenta.

¿Hay alguna otra forma de ejecutar pruebas EJB contra AP real? ¿Se puede implementar EAR después de cada módulo EJB con un subconjunto de módulos EJB que ya se construyeron? Pero cómo ?

¿Se puede configurar para ejecutar pruebas maven de todos los módulos EJB como parte de las pruebas EAR? Como hacer esto ?

Respuesta

7

Esto no es un problema simple, y no hay una respuesta fácil. Con suerte, estos indicadores ayudarán.

Creo que su mejor estrategia es separar las pruebas en las pruebas unitarias genuinas, que se pueden ejecutar de forma aislada sin un contenedor, y trasladar las pruebas que requieren el contenedor a las pruebas de integración.

Puede usar Ejb3unit para maximizar las pruebas que no requieren la ejecución de un contenedor. Ayuda a burlarse de algunas de las dependencias complicadas. Ejb3unit tiene un plugin de Maven, ver el documentation para detalles al conectarse a su repositorio de Maven.

Otros marcos de burla como JMock también pueden ayudar. Puede simular clases e interfaces si usa un ClassImposteriser.

Para aquellas pruebas que sí necesitan un contenedor EJB, puede configurarlas para que se ejecuten como integration tests, puede tener sentido moverlas a un proyecto separado, dependiendo de las relaciones entre sus proyectos EJB.

Es posible iniciar un embedded Jetty instance in your JUnit tests y agregarle servlets mediante programación. Por supuesto, Jetty no es un contenedor EJB. Necesitará un contenedor EJB como OpenEJB.

Para configurar OpenEJB en el embarcadero, utilizar una configuración como ésta:

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

Las declaraciones de dependencia para OpenEJB serían:

<dependency> 
    <groupId>org.apache.openejb</groupId> 
    <artifactId>openejb-core</artifactId> 
    <version>3.1</version> 
    <scope>test</scope> 
</dependency> 

También puede utilizar Selenium para ayudar con las pruebas funcionales (suponiendo que hayas llegado tan lejos), aquí hay un guide using Selenium, Jetty and OpenEJB para hacerlo.

Cuestiones relacionadas