2010-02-16 10 views

Respuesta

8

Sí, cuando se ejecutan pruebas (es decir, aquellas en el directorio de integración), la aplicación se inicia y todos los beans se crean y se inyectan como si la aplicación se estuviera ejecutando realmente. La única diferencia entre la aplicación de prueba y la aplicación en ejecución debe ser el entorno de configuración.

Por supuesto, si instancia una clase que requiera inyección utilizando el "nuevo" operador en su prueba, no obtendrá los beneficios de DI. En su lugar, crear una propiedad en el caso de test para el bean de sus pruebas y se le inyectará:

class MyServiceTests extends GrailsUnitTestCase { 

    MyService service 

    void testInjection() { 
     assertNotNull service 
    } 
} 
+0

Gracias. Estoy probando un servicio que depende de otros servicios y lo estaba creando y, debido a esto, no obtuve los beneficios de DI. – Lucas

+2

Sólo una nota al margen. Las pruebas de integración no deberían extender GrailsUnitTestCase, dependiendo de la versión, esto puede causar serios problemas con su ConfigurationHolder.config como nulo. Yes grails create-integration-test en muchas versiones crea una prueba que extiende GrailsUnitTestCase, pero este es un error que se ha solucionado recientemente. –

+0

¿Por qué la respuesta dice "por supuesto, si instancia una clase que requiere inyección", no obtendrá DI? ¿Por qué es ese el caso en general? No fue obvio para mí, aunque penosamente lo descubrí. –

4

Para aquellos de ustedes usando Grails 1.3.7, me he dado cuenta que no puede utilizar el nombre de clase para que la Inyección de Dependencia funcione. En su lugar, declare el servicio como:

def myService 

y luego ocurre la magia DI. Con el código anterior en 1.3.7 la aserción no nulo fallaría.

+0

1.3.7 y superior. Este es un problema en 2.4.x también. Además, para las pruebas de integración del controlador debe crear una instancia del controlador: 'def fooController = new FooController()' - entonces las dependencias estarán cableadas correctamente. –

Cuestiones relacionadas