web-dev-qa-db-ja.com

テストアプリをgrailsしてコンソールに出力する

Djangoから来たGrailsは初めてです。

テスト駆動開発を使用して、私はテストを作成し、次に実際の機能を作成することに慣れています。テストを記述し、デバッグ出力を使用して関数を実行し、単体テストに合格するまで変数の状態を確認してから、デバッグ出力を移動するのが適切です。

Grailsでは、「grails test-app」、「log.debug」および「println」の出力はコンソールに記録されず、レポートにも含まれません。

ドキュメントでは、log.debug呼び出しをコンソールに出力するモックロギングの使用について説明していますが、grails 1.2.1を使用すると、出力が表示されません。

開発をスピードアップするために、コンソールで「println」または「log.debug」の出力を確認する方法を教えてもらえますか?

37
Ulrich Enslin

Grails test-appに-echoOutスイッチを追加します。これは 1.2リリースの新機能 です。

grails test-app -echoOut

Test-appには、他にも便利なスイッチがいくつかあります。

エコーSystem.errメッセージ:

grails test-app -echoErr

テストを実行する前に強制的にクリーンアップします(grails clean && grails test-appを実行せずに):

grails test-app -clean

単体テストのみを実行する:

grails test-app unit:

統合テストのみを実行します。

grails test-app integration:

特定の環境で実行します。

grails -Dgrails.env=production test-app

特定のテストクラス(com.foo.MyControllerTestsなど)に対してのみテストを実行します。必ず「Tests」サフィックスを省略してください。

grails test-app com.foo.MyController

最後にテストを実行したときに失敗したテストのみを再実行します

grails test-app -rerun
79
Ted Naleid

Log.debugステートメントを表示するには、grails-app/conf/Config.groovyファイルのlog4セクションに以下を追加する必要があります。

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

あなたもこれをするのを助けるかもしれない1つのことはこれをすることです:

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 org.slf4j.Logger
import org.slf4j.LoggerFactory

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

   ... your tests ...
}

これを行うと、logはドメイン、サービス、コントローラーオブジェクトの場合とほとんど同じように動作し、grailsが自動的にログを挿入します。なぜテストで自動注入されないのかわかりません...

3
jpswain

Config.groovyにlog4j構成を追加することに関する他の答えは重要です

debug 'grails.app'

ただし、テストするモジュールでロギングがオンになっていることも確認してください。

たとえば、テストでこのような失敗が見られた場合

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

デバッグログが表示されなかった場合は、パッケージのログを追加する必要があるかもしれません

debug 'org.company'
0
Colin D