2010-02-07 98 views
36

我是来自Django的grails新手。grails test-app输出到控制台

使用测试驱动开发,我习惯于编写测试和实际功能。对我来说编写测试非常有效,运行带有一些调试输出的函数以查看变量的状态,直到单元测试通过,然后移动调试输出。

在grails中,'grails test-app','log.debug'和'println'的输出没有记录到控制台,它也不在报告中。

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

任何人都可以让我知道如何在控制台中看到'println'或'log.debug'的输出以加快我的研发速度吗?

回答

77

的-echoOut开关添加到的grails测试应用程式内,这是new in the 1.2 release

grails test-app -echoOut 

上有测试应用程式内许多其它有用的开关,以及包括:

回波系统。一个干净的运行测试(不这样做的Grails干净& & Grails的测试应用程序)之前

grails test-app -echoErr 

力:犯错的消息

grails test-app -clean 

只运行单元测试:

grails test-app unit: 

只运行集成测试:

grails test-app integration: 

在特定的环境中运行:只针对特定

grails -Dgrails.env=production test-app 

运行测试测试类(如com.foo.MyControlle rTests), 一定要留掉了“测试”的后缀:

grails test-app com.foo.MyController 

只重新运行失败,你跑你的测试

grails test-app -rerun 
+1

您是否知道如何输出junit报告的实际错误?即“预计富,但得到了”。即使使用-testOut和-testErr,它也不会显示,我必须查看target/test-reports/plain/*。txt文件。 – c089 2011-04-13 17:52:23

+0

同样的问题在这里。我必须做这样的事情:$ grails test-app -echoOut -echoErr Something.testMain; cat ./target/test-reports/plain/TEST-integration-integration-SomethingTests.txt有没有人知道一种方法来真正地让它输出一切? Thxx! – jpswain 2011-04-26 21:48:06

+0

感谢您发布这些内容。我只希望我能想出一种方法让控制台输出打印它正在运行的测试名称,而不是“1 xx”。这些-echoOut打印出一些有用的信息,但不是测试名称。 – franzcatch 2017-02-10 21:34:41

5

为了看log.debug声明最后一次测试您需要将以下添加到的grails-app/conf目录/ Config.groovy中文件的LOG4部分:

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

一件事可能也帮助你这样做:

确保你的配置。常规设置的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 org.slf4j.Logger 
import org.slf4j.LoggerFactory 

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

    ... your tests ... 
} 
 

如果你这样做,日志会表现的相当多,因为它在该领域一样,服务和控制器对象,其中grails为您自动注入它。我不知道为什么他们没有在测试中自动注入...

0

约Config.groovy中添加log4j的配置对方回答是重要

debug 'grails.app' 

而且还确保您的模块测试已打开日志记录。

例如,如果你看到一些像这样的失败从测试

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

和调试日志记录没有显示出来,那么你可能还需要添加记录你的包

debug 'org.company'