2010-02-07 19 views
36

Sono nuovo ai graal, proveniente da Django.grails test-app per l'output sulla console

Utilizzando lo sviluppo basato su test, sono abituato a scrivere test e quindi funzionalità effettiva. Ciò che funziona bene per me è scrivere il test, eseguire la funzione con un output di debug per vedere lo stato delle variabili fino a quando passa il test unitario e quindi spostare l'output di debug.

In Grails test-app Grails, l'output di "log.debug" e "println" non viene registrato nella console e non è nemmeno presente nella segnalazione.

La documentazione punta all'utilizzo di mocklogging, che dovrebbe restituire le chiamate log.debug alla console, ma utilizzando grails 1.2.1, non riesco a vedere alcun output.

Qualcuno può farmi sapere come visualizzare l'output di "println" o "log.debug" nella console per accelerare il mio sviluppo?

risposta

77

Aggiungere l'interruttore -echoOut a grails test-app, questo è new in the 1.2 release:

grails test-app -echoOut 

Ci sono un certo numero di altri interruttori utili sulla prova app pure, tra cui:

sistema eco. err messaggi:

grails test-app -echoErr 

vigore un ambiente pulito prima di eseguire i test (senza fare graal pulite & & graal test-app):

grails test-app -clean 

eseguito solo test di unità:

grails test-app unit: 

solo eseguire test di integrazione:

grails test-app integration: 

eseguito in un ambiente particolare:

grails -Dgrails.env=production test-app 

test eseguito solo per un determinato classe di test (come com.foo.MyControlle rTests), essere sicuri di lasciare fuori il suffisso "Test":

grails test-app com.foo.MyController 

rieseguire solo i test che hanno fallito l'ultima volta che è stato eseguito i test

grails test-app -rerun 
+1

Sai come emettere l'errore actuall come riportato da junit? Cioè "foo previsto, ma ottenuto bar". Anche con -testOut e -testErr, non è visualizzato e devo cercare nei file target/test-reports/plain/* .txt. – c089

+0

Lo stesso problema qui. Devo fare qualcosa del genere: $ grails test-app -echoOut -echoErr Something.testMain; cat ./target/test-reports/plain/TEST-integration-integration-SomethingTests.txt Qualcuno conosce un modo per ottenere effettivamente l'output di tutto? Thxx! – jpswain

+0

Grazie per aver postato questi. Spero solo di poter trovare un modo per fare in modo che l'output della console stampi il nome del test in esecuzione anziché "1 di xx". Questi -echoOut stampa alcune informazioni utili, ma non il nome del test. – franzcatch

5

per vedere le dichiarazioni Log.DEBUG è necessario aggiungere il seguente alla sezione log4 del graal-app/conf/Config.groovy del file:

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

una cosa che potrebbe anche questo aiuto ti aiuta a fare questo:

Assicurati di avere la tua configurazione.Groovy imposta 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' 
    } 
} 

 

nel test, fare questo:

 

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

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

    ... your tests ... 
} 
 

Se si esegue questa operazione, il registro si comporterà l'praticamente la stessa come avviene nel dominio, il servizio, e il controller oggetti, dove grails si auto-inietta per te. Non ho idea del perché non si auto-iniettano nei test ...

0

L'altra risposta su come aggiungere la configurazione log4j in Config.groovy è importante

debug 'grails.app' 

ma anche assicurarsi che i moduli si sono i test hanno attivato la registrazione.

Per esempio, se avete visto qualche errore come questo dal test

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

e la registrazione di debug non stava rivelando, allora si potrebbe anche essere necessario aggiungere la registrazione per il pacchetto

debug 'org.company' 
Problemi correlati