2010-02-07 93 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'