2010-02-07 19 views
36

Soy nuevo en Grails, procedente de Django.grails test-app para enviar a la consola

Al usar el desarrollo basado en pruebas, estoy acostumbrado a escribir pruebas y luego a la funcionalidad real. Lo que me funciona bien para escribir la prueba, ejecutar la función con algún resultado de depuración para ver el estado de las variables hasta que pase la prueba de la unidad, y luego mover la salida de depuración.

En grails la 'aplicación de prueba de Grails', la salida de 'log.debug' e 'println' no se graba en la consola, y tampoco está en el informe.

La documentación apunta a usar el simulacro, que debería generar las llamadas de log.debug a la consola, pero al usar Grails 1.2.1, no puedo ver ninguna salida.

¿Alguien me puede decir cómo ver la salida de 'println' o 'log.debug' en la consola para acelerar mi desarrollo?

Respuesta

77

Añadir el interruptor -echoOut a griales prueba de la aplicación, esto es new in the 1.2 release:

grails test-app -echoOut 

Hay una serie de otros interruptores útiles en la prueba de la aplicación, así, como:

Sistema de eco. errar mensajes:

grails test-app -echoErr 

fuerza de un limpio antes de ejecutar las pruebas (sin hacer griales limpias & & griales prueba-app):

grails test-app -clean 

única carrera pruebas de unidad:

grails test-app unit: 

única carrera pruebas de integración:

grails test-app integration: 

se ejecutan en un entorno particular:

grails -Dgrails.env=production test-app 

pruebas ejecutar sólo para un determinado clase de prueba (como com.foo.MyControlle rTests), asegúrese de dejar fuera de la "Pruebas" sufijo:

grails test-app com.foo.MyController 

vuelva a ejecutar solamente las pruebas que fallaron la última vez que se realice pruebas

grails test-app -rerun 
+1

¿Sabes cómo generar el error actual como lo informó junit? Es decir. "esperado foo, pero tengo bar". Incluso con -testOut y -testErr, no se muestra y tengo que buscar en los archivos target/test-reports/plain/*. Txt. – c089

+0

Mismo problema aquí. Tengo que hacer algo como esto: $ grails test-app -echoOut -echoErr Something.testMain; cat ./target/test-reports/plain/TEST-integration-integration-SomethingTests.txt ¿Alguien sabe cómo obtener realmente todo? Thxx! – jpswain

+0

Gracias por publicar esto. Ojalá pudiera encontrar la manera de hacer que la salida de la consola imprima el nombre de la prueba que está ejecutando en lugar de "1 de xx". Estos -echoOut imprimen alguna información útil, pero no el nombre de la prueba. – franzcatch

5

el fin de ver las declaraciones Log.DEBUG es necesario agregar lo siguiente a la sección de log4 del archivo griales-app/conf/Config.groovy:

log4j = { 
    ... 
    ... 
    ... 
    debug 'grails.app' 
} 
3

Una cosa que podría también lo ayudará a hacer esto:

Asegúrese de que su Config.maravilloso establece log4j:

 

import grails.util.GrailsUtil 

if (GrailsUtil.environment == 'test') { 
    log4j = { 

     appenders { 
      // %d{yyyyMMdd.HHmmss.SSS} %r [%t] %-5p %c %x - %m%n 
      console name:'a1', layout:pattern(conversionPattern: '%d{yyyyMMdd.HHmmss.SSS} %r [%t] %-5p %c %x - %m%n') 
     } 

     root { 
      info 'a1' 
      additivity = true 
     } 

     // debug 'org.springframework.security' 

     error 'org.codehaus.groovy.grails.web.servlet', // controllers 
       'org.codehaus.groovy.grails.web.pages', // GSP 
       'org.codehaus.groovy.grails.web.sitemesh', // layouts 
       'org.codehaus.groovy.grails.web.mapping.filter', // URL mapping 
       'org.codehaus.groovy.grails.web.mapping', // URL mapping 
       'org.codehaus.groovy.grails.commons', // core/classloading 
       'org.codehaus.groovy.grails.plugins', // plugins 
       'org.codehaus.groovy.grails.orm.hibernate', // hibernate integration 
       'org.springframework', 
       'org.hibernate', 
       'org.apache', 
       'grails.util.GrailsUtil', 
       'grails.app.service.NavigationService', 
       'org.quartz', 
       'net.sf.ehcache' 

     fatal 'NotificationJob' 


     warn 'org.mortbay.log', 
       'groovyx.net.ws',     // Web services too noisy with INFO statements 
       'org.apache.cxf.endpoint.dynamic' // Web services too noisy with INFO statements 

     info 'org.springframework.security' 

     debug 'grails.app.controller.TroublesomeController' 
    } 
} 

 

En su prueba, hacer esto:

 

import org.slf4j.Logger 
import org.slf4j.LoggerFactory 

class HandoffTests extends GroovyTestCase { 
    Logger log = LoggerFactory.getLogger(HandoffTests) 

    ... your tests ... 
} 
 

Si hace esto, el registro se comportará el más o menos lo mismo que lo hace en el dominio, el servicio, y el controlador objetos, donde Grails lo autoinyecta por usted. No tengo idea de por qué no se auto-inyectan en las pruebas ...

0

La otra respuesta sobre cómo agregar la configuración de log4j en Config.groovy es importante

debug 'grails.app' 

Pero también asegurarse de que los módulos que usted está las pruebas tienen el registro activado.

Por ejemplo, si has visto alguna falla como esta de su prueba

| Failure: write a GFF3 of a simple gene model(org.company.YourAppIntegrationSpec) 

y el registro de depuración no estaba mostrando, entonces es posible que también tenga que añadir el registro para su paquete

debug 'org.company' 
Cuestiones relacionadas