web-dev-qa-db-fra.com

grails test-app pour la sortie sur console

Je suis nouveau à Grails, venant de Django. 

En utilisant le développement piloté par les tests, je suis habitué à écrire des tests puis des fonctionnalités réelles. Ce qui fonctionne bien pour moi, c’est écrire le test, exécuter la fonction avec une sortie de débogage pour voir cet état des variables jusqu’à ce que le test unitaire réussisse, puis déplacer la sortie de débogage.

Dans Grails, "grails test-app", les sorties de "log.debug" et "println" ne sont pas enregistrées sur la console et ne figurent pas non plus dans les rapports.

La documentation indique l'utilisation de mocklogging, qui devrait générer les appels log.debug vers la console, mais en utilisant grails 1.2.1, je ne peux voir aucune sortie.

Quelqu'un peut-il me dire comment afficher le résultat de 'println' ou 'log.debug' dans la console pour accélérer mon développement?

37
Ulrich Enslin

Ajoutez le commutateur -echoOut à grails test-app, ceci est nouveau dans la version 1.2 :

grails test-app -echoOut

Il existe un certain nombre d'autres commutateurs utiles sur test-app, notamment:

messages echo System.err:

grails test-app -echoErr

forcer un nettoyage avant d'exécuter des tests (sans grails clean && grails test-app):

grails test-app -clean

seulement exécuter des tests unitaires:

grails test-app unit:

exécuter uniquement des tests d'intégration: 

grails test-app integration:

exécuter dans un environnement particulier:

grails -Dgrails.env=production test-app

exécuter des tests uniquement pour une classe de test particulière (comme com.foo.MyControllerTests), veillez à ne pas utiliser le suffixe "Tests":

grails test-app com.foo.MyController

réexécutez uniquement les tests qui ont échoué la dernière fois que vous avez exécuté vos tests

grails test-app -rerun
78
Ted Naleid

Pour voir les instructions log.debug, vous devez ajouter ce qui suit dans la section log4 du fichier grails-app/conf/Config.groovy :

log4j = {
   ...
   ...
   ...
   debug 'grails.app'
}
5
John Wagenleitner

Une chose qui pourrait aussi vous aider est la suivante:

Assurez-vous que votre Config.groovy configure 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'
    }
}

Dans votre test, faites ceci:


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

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

   ... your tests ...
}

Si vous faites cela, log se comportera à peu près de la même manière que dans les objets de domaine, de service et de contrôleur, où grails l'injectera automatiquement pour vous. Je ne sais pas pourquoi ils ne s'injectent pas automatiquement dans les tests ...

3
jpswain

L’autre réponse sur l’ajout de la configuration log4j dans Config.groovy est importante

debug 'grails.app'

Mais assurez-vous également que la journalisation est activée sur les modules que vous testez.

Par exemple, si vous avez constaté un tel échec lors de votre test

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

et la journalisation de débogage ne s’affichait pas, alors vous pourriez aussi avoir besoin d’ajouter la journalisation de votre paquet

debug 'org.company'
0
Colin D