GradleのtestLogging
testLoggingの初期値(LogLevel別)
調べたことを表にまとめるとこうだった。
debug | info | lifecycle | warn | quiet | error | ||
---|---|---|---|---|---|---|---|
events | STARTED | ○ | × | × | × | × | × |
PASSED | ○ | × | × | × | × | × | |
SKIPPED | ○ | ○ | × | × | × | × | |
FAILED | ○ | ○ | ○ | × | × | × | |
STANDARD_OUT | ○ | ○ | × | × | × | × | |
STANDARD_ERROR | ○ | ○ | × | × | × | × | |
displayGranularity | 2 | 2 | 2 | 2 | 2 | 2 | |
maxGranularity | -1 | -1 | -1 | -1 | -1 | -1 | |
minGranularity | 0 | -1 | -1 | -1 | -1 | -1 | |
showExceptions | true | true | true | true | true | true | |
showCauses | true | true | true | true | true | true | |
showStackTraces | true | true | true | true | true | true | |
exceptionFormat | FULL | FULL | SHORT | FULL | FULL | FULL | |
stackTraceFilters | ENTRY_POINT | × | × | × | × | × | × |
TRUNCATE | × | ○ | ○ | ○ | ○ | ○ | |
GROOVY | × | × | × | × | × | × | |
showStandardStreams | true | true | false | false | false | false |
テストの開始ログが欲しい
lifecycleだとテストが動いてるのか止まっているのか良くわからない。
仮に初期値のままやるのであれば、gradle --debugとか頭おかしいことをすることになる。
では、lifecycleのeventsにSTARTEDを加えるのか?
それだとテストメソッドごとにログがでてきて憤死する。
せめて、テストクラスごとにログがでてくれればいい。
そういうときって、TestタスクのbeforeSuiteを書けばできそうだ。
test { beforeSuite { desc -> logger.lifecycle("{} {}",desc.name, tasks.testing.logging.TestLogEvent.STARTED) } }
あと、gradle --infoのときはテストメソッドの開始ログ、終了ログを出してやろう。
でも、標準出力と標準エラーはごめんこうむりたい。
test { testLogging { info { events "started","passed","skipped","failed" } } }
lifecycleだけexceptionFormat=SHORTなのは嫌
test {
exceptionFormat "FULL"
}
もしくは
test {
testLogging {
lifecycle {
exceptionFormat "FULL"
}
}
}
テスト結果の統計を見たい
何もしなくてもTestタスク全体の統計はでるけど、テストクラス単位のも出してみるか。
そういう時はafterSuiteを使う。
ちょっと懲りすぎかもしれないがこういうコード。
test { afterSuite { desc, result -> def event = tasks.testing.logging.TestLogEvent.FAILED def level = logging.LogLevel.ERROR if( tasks.testing.TestResult.ResultType.SUCCESS == result.resultType ){ event = tasks.testing.logging.TestLogEvent.PASSED level = logging.LogLevel.LIFECYCLE } else if ( tasks.testing.TestResult.ResultType.SKIPPED == result.resultType ){ event = tasks.testing.logging.TestLogEvent.SKIPPED level = logging.LogLevel.WARN } logger.log(level, "{} {} total={} passed={} skipped={} failed={} elapse={} sec", desc.className, event, result.testCount, result.successfulTestCount, result.skippedTestCount, result.failedTestCount, (result.endTime - result.startTime)/1000) } }