2011-01-12 16 views
7

Estoy tratando de averiguar cómo acceder a Spring beans de una subclase de JerseyTest. Extendiendo JerseyTest He logrado cargar el contexto de Spring en mis pruebas, pero no he descubierto cómo acceder al contexto de primavera. Mi configuración se ve así:Acceso a Spring beans en JerseyTest

public abstract class SpringJerseyTest extends JerseyTest { 
    public SpringJerseyTest() throws Exception { 
     super(new WebAppDescriptor.Builder("com.acme.resources") 
      .contextPath("/") 
      .contextParam("contextConfigLocation", "classpath:applicationContext.xml") 
      .servletClass(SpringServlet.class) 
      .contextListenerClass(ContextLoaderListener.class) 
      .build()); 
    } 

} 

La configuración está utilizando el Grizzly Web Container predeterminado. Nunca he usado antes del grisáceo, pero en el embarcadero me gustaría hacer algo como esto:

public Object getSpringBean(String beanName) { 
     WebAppContext context = (WebAppContext) server.getHandler(); 
     ServletContext sc = context.getServletContext(); 
     WebApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(sc); 
     return applicationContext.getBean(beanName); 
    } 

Podría alguien me punto en la dirección correcta?

+0

No estoy seguro si hay otra forma de evitar esto, pero he encontrado esta entrada de blog: http://geek.riffpie.com/2010/ 08/09/unit-testing-restful-jersey-services-pegado-junto-con-resorte/Usando el jersey-test-support ahora puedo usar @Autowired en mis pruebas también. – ebaxt

+0

Parece que el enlace anterior está roto, enlace actualizado: http://geek.riffpie.com/unit-testing-restful-jersey-services-glued-together-with-spring/ – crobicha

Respuesta

2

He estado utilizando la solución descrita here durante una semana, y está funcionando bien.

10

estoy usando un enfoque ingenuo, pero funciona

public ResourceIT() 
    { 
     super(new WebAppDescriptor.Builder("amazingpackage") 
       .servletClass(SpringServlet.class) 
       .contextParam("contextConfigLocation", "classpath:/spring/context.xml") 
       .contextListenerClass(ContextLoaderListener.class) 
       .contextPath("context") 
       .build()); 
     injectedBean = ContextLoaderListener 
       .getCurrentWebApplicationContext().getBean(InjectedBean.class); 
    } 
-1

No entiendo la necesidad de JerseyTest que utiliza grano de primavera, a menudo sus frijoles de primavera son de Capa de Servicio/Dao y tienen que ser prueba Test Unit/Integración en su capa, usando Mockito o DBUnit (pruebas de integración).

He estado probando las clases de Recursos de Jersey usando frijoles Sprig como burlas, esto es porque tienes que aislar las pruebas, y probar solo material de Jersey (y Json) en JerseyTest, no Service o Dao Layer. Sí, lo hago paso mi contexto de frijol de primavera, pero los frijoles de primavera son solo burlas, porque no quiero probar los frijoles primavera en JerseyTests.

Si usted aísla pruebas de que sería más fácil de escribir y mantener sus pruebas

Cuestiones relacionadas