2010-05-25 611 views
9

¿Es posible ejecutar de forma rápida toda la prueba individual/integración en una clase rápidamente en Grails. La prueba de la aplicación viene con equipaje pesado de la limpieza de todos los archivos recopilados y los informes de generación de Cobertura por lo tanto, incluso si corremos prueba de integración única, toda la base de código se compila, instrumentado y se está generó el informe Cobertura. Para nuestra aplicación, esto lleva más de 2 minutos.Ejecución de prueba de integración única con rapidez en Grails

Si era posible ejecutar rápidamente en uno de pruebas de integración y obtener una rápida feedbck, sería sumamente útil.

También, es importante limpiar todos los archivos compilados una vez finalizada la prueba? Esta limpieza es bien si corremos todo el conjunto de prueba de integración, pero si vamos a ejecutar una o dos pruebas en una clase de esta limpieza y re-compilación parece ser un gran cuello de botella para una retroalimentación más rápida a los desarrolladores.

Gracias

Respuesta

5

Es la intención de la prueba de integración que ver toda esta recopilación, creación de base de datos, servidor de partida, etc., porque las pruebas deben ejecutarse en un entorno integrado, como su nombre indica.

Tal vez se puede extraer algunas pruebas para las pruebas unitarias. Estos se pueden ejecutar en Eclipse.

Puede apagar Cobertura colocando el siguiente código en su griales-app/conf/BuildConfig.groovy:

coverage { 
    enabledByDefault = false 
} 
+0

La Cobertura de hecho tenía el problema. Estábamos utilizando el plugin de cobertura y el plugin limpió todas las fuentes compiladas después de generar el informe, esto nos impidió explotar todos los beneficios asociados con la compilación incremental. Además, ejecutar una o dos pruebas no requiere un informe de cobertura integral para nosotros y la prueba de integración se ejecutó rápidamente una vez que la desactivamos. Gracias por el puntero. – Prakash

15

Si usted tiene una clase de prueba de integración

class SimpleControllerTests extends GrailsUnitTestCase { 
    public void testLogin() {} 
    public void testLogin2() {} 
    public void testLogin3() {} 
} 

Puede ejecutar solo una prueba en esta clase usando:

grails test-app integration: SimpleController.testLogin 

Sin embargo, todavía tendrá que incurr se requiere multa para pruebas de integración (configuración de carga, conexión a DB, generación de instancias de beans de primavera, etc.)

Si desea que las pruebas se ejecuten rápidamente, intente escribir pruebas de unidad en lugar de pruebas de integración.

+0

El ejemplo de ejecución de una prueba funciona, solo necesita la ruta completa a la Clase, aunque –

0

Como ha indicado, la mayoría de las veces es configurar el entorno de la aplicación, inyectar beans y hacer las anotaciones dinámicas de la clase. Puede acelerar su ciclo de prueba de integración cargándolo solo una vez, ejecutando sus pruebas en la REPL de grails.

Sin embargo, la compensación es que hay problemas de recarga dinámica en el REPL. Si ves rarezas aleatorias, sal de REPL y vuelve a cargar.

$> ./grailsw --plain-output 
|Loading Grails 2.5.3 
|Configuring classpath 
|Enter a script name to run. Use TAB for completion: 
grails> test-app -integration 
... (loads some things) 
... 
grails> test-app -integration 
... (faster loading) 

Y para responder a los otros comentaristas - pruebas de integración son útiles, así, hay algo de código que no puede ser probado con una prueba de unidad (por ejemplo, pruebas de HQL o consultas SQL).

Cuestiones relacionadas