grails test-app输出到控制台

我是来自Django的Grails新手。

使用testing驱动的开发,我习惯于编写testing,然后用实际的function。 对我来说编写testing的效果很好,运行带有一些debugging输出的函数来查看variables的状态,直到unit testing通过,然后移动debugging输出。

在grails中,'grails test-app','log.debug'和'println'的输出不会logging到控制台,也不在报告中。

文档指向使用mocklogging,它应该输出log.debug调用到控制台,但使用grails 1.2.1,我看不到任何输出。

任何人都可以让我知道如何在控制台上看到'println'或'log.debug'的输出来加速我的开发?

将-echoOut开关添加到grails test-app,这是1.2版本中的新function :

grails test-app -echoOut 

test-app上还有许多其他有用的开关,包括:

回声System.err消息:

 grails test-app -echoErr 

在运行testing之前强制清理(不要使用grails clean && grails test-app):

 grails test-app -clean 

只运行unit testing:

 grails test-app unit: 

只能运行集成testing:

 grails test-app integration: 

在特定的环境中运行:

 grails -Dgrails.env=production test-app 

运行testing只为一个特定的testing类(如com.foo.MyControllerTests),一定要离开“testing”后缀:

 grails test-app com.foo.MyController 

只重新运行上次运行testing失败的testing

 grails test-app -rerun 

为了看到log.debug语句,您需要将以下内容添加到grails-app / conf / Config.groovy文件的log4部分:

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

有一件事可能会帮助你做到这一点:

确保你的Config.groovy设置了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' } }
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' } } 

在你的testing中,做到这一点:

import org.slf4j.Logger import org.slf4j.LoggerFactory class HandoffTests extends GroovyTestCase { Logger log = LoggerFactory.getLogger(HandoffTests) ... your tests ... }
import org.slf4j.Logger import org.slf4j.LoggerFactory class HandoffTests extends GroovyTestCase { Logger log = LoggerFactory.getLogger(HandoffTests) ... your tests ... } 

如果这样做,日志的行为将与域,服务和控制器对象的行为几乎相同,其中的grails自动为您注入。 我不知道他们为什么不在testing中自动注入…

关于在Config.groovy中添加log4jconfiguration的其他答案很重要

 debug 'grails.app' 

但也要确保你正在testing的模块已经打开了日志logging。

例如,如果你在testing中看到了这样的失败

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

并且debugging日志logging没有显示出来,那么您可能还需要为您的包添加日志logging

 debug 'org.company'