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?
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
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'
}
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 ...
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'