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'