2009-09-29 24 views
6

Estoy buscando una forma de aplicar TDD a Session Beans.Unidad de prueba EJB

¿Alguien puede proporcionar consejos y enlaces sobre cómo probarlos por unidad?

cómo usar JUnit para hacerlo?

P.S: Soy nuevo en Test Driven Development y Session Beans.

Estoy usando EJB v2.

Respuesta

8

Supongo que está hablando de EJB2.x Session Beans. Para este tipo de animales, lo que me gusta hacer es:

  • utilizar el bean de sesión como un envoltorio que sólo los delegados lógica para un POJO que se puede probar fácilmente fuera de un contenedor. las pruebas de contenedores fuera es mejor, más rápido, más fácil, etc, pero no cubrirá las cosas tales como la validación de descriptor de despliegue - y/o -
  • usar algo como Cactus para realizar pruebas en contenedor (consulte la documentación Howto EJB) - y/o -
  • Cree y despliegue su módulo EJB con Cargo para realizar pruebas de integración.
+0

+1 - Para sus dos últimas sugerencias, no he pensado en Cactus en años.:) –

+0

En realidad, no utilicé Cactus durante años :) –

+0

Intenté configurar Cactus para su uso, ¡pero realmente no lo entiendo! Siento que es muy difícil de configurar. Estoy usando Eclipse y NetBeans. – Attilah

5

No dice qué versión de EJB está utilizando. Si se trata de EJB v3, consulte Ejb3Unit. Desde el sitio web:

Ejb3Unit es una extensión de JUnit y puede ejecutar JUnit independiente automatizado pruebas para todos los EJB 3.0 conformar Java EE proyectos. El enfoque de prueba fuera del contenedor genera ciclos de prueba de compilación cortos, porque ya no es necesario implementar un contenedor en .

Sin embargo, recomendaría separar la funcionalidad de los EJB-específicos. Esto le permitirá probar funcionalidades complejas fuera del contenedor y sin utilizar marcos como el anterior. La mayoría de sus pruebas estarían probando POJO (objetos simples antiguos de Java) y relativamente pocos se enfocarían en sus pruebas de marco de persistencia.

EDITAR: Entonces, si está utilizando EJB v2, obviamente ignore el primer punto. El segundo punto sigue siendo válido, sin embargo.

2

Actualmente estoy usando apache openejb como un contenedor integrado para pruebas unitarias. Aunque se trata de un proyecto EJB3/JPA, debería funcionar igual para EJB2. Para arrancar el recipiente en sus pruebas sólo hay que crear un objeto InitialContext que luego puede utilizar para buscar EJB y DataSources:

Properties props = new Properties(); 
props.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.LocalInitialContextFactory"); 

// a DataSource named "mysql" 
props.put("mysql", "new://Resource?type=DataSource"); 
props.put("mysql.JdbcDriver", "com.mysql.jdbc.Driver"); 
props.put("mysql.JdbcUrl", "jdbc:mysql://localhost:3306"); 
props.put("mysql.JtaManaged", "true"); 
props.put("mysql.DefaultAutoCommit", "false"); 
props.put("mysql.UserName", "root"); 
props.put("mysql.Password", "root"); 

Context context = new InitialContext(props); 
LocalInterface local = (LocalInterface)context.lookup(localInterfaceName + "BeanLocal"); 
DataSource ds = (DataSource)context.lookup("java:openejb/Resource/mysql"); 

Editar: Hay un poco de más documentación en la sección 'Técnicas de prueba' en http://openejb.apache.org/3.0/index.html.

+0

¿me puede dar un enlace a un buen tutorial sobre esto? parece prometedor – Attilah