2011-05-05 7 views
7

Estoy construyendo un servicio web RESTful usando Jersey que confía en MongoDB para la persistencia.¿Cómo puedo inyectar una dependencia de fuente de datos en un servicio web RESTful con Jersey (Test Framework)?

El servicio web en sí se conecta a la base de datos predeterminada, pero para las pruebas unitarias, me gustaría usar una base de datos de prueba por separado. Completaría esta base de datos de prueba en setUp, ejecutaría mis pruebas y luego lo destruiría en tearDown.

Normalmente, usaría la inyección de dependencia aquí para suministrar la fuente de datos a un administrador de entidades que el servicio usaría, pero en este caso el servicio web se ejecuta independientemente de las pruebas unitarias. Estoy utilizando Jersey Test Framework, que inicia un contenedor Grizzly para proporcionar la interfaz de servicio web y proporciona un cliente de servicio web para la clase de prueba de la unidad.

¿Cuál es la mejor manera de inyectar una dependencia de mi clase de prueba unitaria en la instancia del servidor (que Jersey Test Framework configura en un contenedor Grizzly)?

Respuesta

3

Después de explorar el origen de Jersey Test Framework, descubrí una forma elegante de insertar dependencias en mis clases de recursos RESTful.

En mi clase de prueba (que se extiende JerseyTest), he añadido únicamente una implementación para el método configure():

public AppDescriptor configure() { 
    return new WebAppDescriptor.Builder() 
     .contextListenerClass(ContextLoaderListener.class) 
     .contextParam("contextConfigLocation", "classpath:applicationContext.xml") 
     .initParam("com.sun.jersey.config.property.packages", "[resource package]") 
     .build(); 
} 

Esto proporciona efectivamente una costumbre construido WebAppDescriptor en lugar de confiar en la Web del grisáceo de prueba Jersey contenedor para construir uno.

Esto usará el archivo "applicationContext.xml" en classpath, que se puede configurar de manera diferente para ejecutar pruebas JUnit. Efectivamente, tengo dos archivos applicationContext.xml diferentes: uno para mis pruebas JUnit y el otro para el código de producción. ApplicationContext.xml de la prueba configurará el objeto de dependencia de acceso a datos de forma diferente.

Cuestiones relacionadas