回答:
コマンドラインでINFOロギングレベルでGradleを実行できます。実行中の各テストの結果が表示されます。欠点は、他のタスクでも出力がはるかに多くなることです。
gradle test -i
-i
により、無関係な情報が端末に大量にスローされます。
grep
して、数千の不要な行を除外できます。stackoverflow.com/questions/3963708/…を
ここに私の素晴らしいバージョンがあります:
import org.gradle.api.tasks.testing.logging.TestExceptionFormat
import org.gradle.api.tasks.testing.logging.TestLogEvent
tasks.withType(Test) {
testLogging {
// set options for log level LIFECYCLE
events TestLogEvent.FAILED,
TestLogEvent.PASSED,
TestLogEvent.SKIPPED,
TestLogEvent.STANDARD_OUT
exceptionFormat TestExceptionFormat.FULL
showExceptions true
showCauses true
showStackTraces true
// set options for log level DEBUG and INFO
debug {
events TestLogEvent.STARTED,
TestLogEvent.FAILED,
TestLogEvent.PASSED,
TestLogEvent.SKIPPED,
TestLogEvent.STANDARD_ERROR,
TestLogEvent.STANDARD_OUT
exceptionFormat TestExceptionFormat.FULL
}
info.events = debug.events
info.exceptionFormat = debug.exceptionFormat
afterSuite { desc, result ->
if (!desc.parent) { // will match the outermost suite
def output = "Results: ${result.resultType} (${result.testCount} tests, ${result.successfulTestCount} passed, ${result.failedTestCount} failed, ${result.skippedTestCount} skipped)"
def startItem = '| ', endItem = ' |'
def repeatLength = startItem.length() + output.length() + endItem.length()
println('\n' + ('-' * repeatLength) + '\n' + startItem + output + endItem + '\n' + ('-' * repeatLength))
}
}
}
}
|
を削除しましたstartItem
。
ロギングを行うbuild.gradleファイル内にGroovyクロージャーを追加できます。
test {
afterTest { desc, result ->
logger.quiet "Executing test ${desc.name} [${desc.className}] with result: ${result.resultType}"
}
}
コンソールでは次のようになります。
:compileJava UP-TO-DATE
:compileGroovy
:processResources
:classes
:jar
:assemble
:compileTestJava
:compileTestGroovy
:processTestResources
:testClasses
:test
Executing test maturesShouldBeCharged11DollarsForDefaultMovie [movietickets.MovieTicketsTests] with result: SUCCESS
Executing test studentsShouldBeCharged8DollarsForDefaultMovie [movietickets.MovieTicketsTests] with result: SUCCESS
Executing test seniorsShouldBeCharged6DollarsForDefaultMovie [movietickets.MovieTicketsTests] with result: SUCCESS
Executing test childrenShouldBeCharged5DollarsAnd50CentForDefaultMovie [movietickets.MovieTicketsTests] with result: SUCCESS
:check
:build
バージョン1.1以降、Gradleはテスト出力をログに記録するためのより多くのオプションをサポートしています。これらのオプションを使用すると、次の構成で同様の出力を実現できます。
test {
testLogging {
events "passed", "skipped", "failed"
}
}
以下のようstefanglaseは答えました:
次のコードをbuild.gradle
(バージョン1.1以降)に追加すると、合格したテスト、スキップしたテスト、および失敗したテストの出力に問題なく機能します。
test {
testLogging {
events "passed", "skipped", "failed", "standardOut", "standardError"
}
}
さらに言いたいのは(これは初心者の問題であることがわかりました)、gradle test
コマンドは変更ごとに1回だけテストを実行するということです。
したがって、2回目に実行した場合、テスト結果の出力はありません。これは建物の出力でも確認できます。gradleはテストでUP-TO-DATEと表示します。そのため、n回実行されません。
スマートグラドル!
テストケースを強制的に実行する場合は、を使用しますgradle cleanTest test
。
これは少し話題から外れていますが、初心者に役立つことを願っています。
編集する
sparc_spreadコメントで次のように述べました。
あなたがするのGradleを強制したい場合は、常に新鮮なテストを実行し、追加することができます(常に良いアイデアではないかもしれません)outputs.upToDateWhen {false}
にしtestLogging { [...] }
。ここを読み続けてください。
平和。
gradle cleanTest test
毎回言う必要がない方法を見つけました(Gradle 1.12以降)。に追加outputs.upToDateWhen {false}
するtestLogging {...}
と、それでうまくいくはずです。Gradleが毎回テストを実行するように強制します。Dockter自身が投稿したGradleフォーラムでこれを見つけました。お役に立てれば。
exceptionFormat "full"
AssertJまたは同様のlibを使用しているときに役立つ、何が失敗したかについての詳細を取得するために含めます。
cleanTest
使用することができますtest --rerun-tasks
--rerun-tasks
テスト用のタスクだけでなく、すべてのタスクを再実行すると思います。
cleanTest test
最新のAndroid Studioでは、gradle 3.3は私の側では機能しません--rerun-tasks
が、トリックを行いました。理由がわからない。しかし、この答えを読んだことで頭痛は本当に解決しました。
免責事項:私はGradle Test Logger Pluginの開発者です。
Gradle Test Logger Pluginを使用するだけで、コンソールに美しいログを印刷できます。プラグインは、ほとんどまたはまったく設定なしでほとんどのユーザーを満足させるために適切なデフォルトを使用しますが、誰にでも合うように多くのテーマと設定オプションを提供します。
plugins {
id 'com.adarshr.test-logger' version '<version>'
}
Gradle Centralから常に最新バージョンを入手してください。
設定は一切必要ありません。ただし、プラグインにはいくつかのオプションがあります。これは、次のように行うことができます(デフォルト値が表示されています)。
testlogger {
// pick a theme - mocha, standard, plain, mocha-parallel, standard-parallel or plain-parallel
theme 'standard'
// set to false to disable detailed failure logs
showExceptions true
// set to false to hide stack traces
showStackTraces true
// set to true to remove any filtering applied to stack traces
showFullStackTraces false
// set to false to hide exception causes
showCauses true
// set threshold in milliseconds to highlight slow tests
slowThreshold 2000
// displays a breakdown of passes, failures and skips along with total duration
showSummary true
// set to true to see simple class names
showSimpleNames false
// set to false to hide passed tests
showPassed true
// set to false to hide skipped tests
showSkipped true
// set to false to hide failed tests
showFailed true
// enable to see standard out and error streams inline with the test results
showStandardStreams false
// set to false to hide passed standard out and error streams
showPassedStandardStreams true
// set to false to hide skipped standard out and error streams
showSkippedStandardStreams true
// set to false to hide failed standard out and error streams
showFailedStandardStreams true
}
どうぞよろしくお願いいたします。
slowThreshold
し0
ます。
「テスト」タスクはAndroidプラグインでは機能しません。Androidプラグインの場合、以下を使用します。
// Test Logging
tasks.withType(Test) {
testLogging {
events "started", "passed", "skipped", "failed"
}
}
次を参照してください:https : //stackoverflow.com/a/31665341/3521637
Shubhamの素晴らしい答えのフォローアップとして、文字列ではなく列挙値を使用することをお勧めします。TestLoggingクラスのドキュメントをご覧ください。
import org.gradle.api.tasks.testing.logging.TestExceptionFormat
import org.gradle.api.tasks.testing.logging.TestLogEvent
tasks.withType(Test) {
testLogging {
events TestLogEvent.FAILED,
TestLogEvent.PASSED,
TestLogEvent.SKIPPED,
TestLogEvent.STANDARD_ERROR,
TestLogEvent.STANDARD_OUT
exceptionFormat TestExceptionFormat.FULL
showCauses true
showExceptions true
showStackTraces true
}
}
Shubham Chaudharyの回答に基づいた私のお気に入りのミニマルバージョン。
これをbuild.gradle
ファイルに入れます:
test {
afterSuite { desc, result ->
if (!desc.parent)
println("${result.resultType} " +
"(${result.testCount} tests, " +
"${result.successfulTestCount} successes, " +
"${result.failedTestCount} failures, " +
"${result.skippedTestCount} skipped)")
}
}
Androidプラグインを使用するGradleの場合:
gradle.projectsEvaluated {
tasks.withType(Test) { task ->
task.afterTest { desc, result ->
println "Executing test ${desc.name} [${desc.className}] with result: ${result.resultType}"
}
}
}
次に、出力は次のようになります。
テストtestConversionMinutes [org.example.app.test.DurationTest]を実行して次の結果を返します:SUCCESS
Shubhamの素晴らしい答えとJJDのマージは文字列の代わりに列挙型を使用します
tasks.withType(Test) {
testLogging {
// set options for log level LIFECYCLE
events TestLogEvent.PASSED,
TestLogEvent.SKIPPED, TestLogEvent.FAILED, TestLogEvent.STANDARD_OUT
showExceptions true
exceptionFormat TestExceptionFormat.FULL
showCauses true
showStackTraces true
// set options for log level DEBUG and INFO
debug {
events TestLogEvent.STARTED, TestLogEvent.PASSED, TestLogEvent.SKIPPED, TestLogEvent.FAILED, TestLogEvent.STANDARD_OUT, TestLogEvent.STANDARD_ERROR
exceptionFormat TestExceptionFormat.FULL
}
info.events = debug.events
info.exceptionFormat = debug.exceptionFormat
afterSuite { desc, result ->
if (!desc.parent) { // will match the outermost suite
def output = "Results: ${result.resultType} (${result.testCount} tests, ${result.successfulTestCount} successes, ${result.failedTestCount} failures, ${result.skippedTestCount} skipped)"
def startItem = '| ', endItem = ' |'
def repeatLength = startItem.length() + output.length() + endItem.length()
println('\n' + ('-' * repeatLength) + '\n' + startItem + output + endItem + '\n' + ('-' * repeatLength))
}
}
}
}
Benjamin Muschkoの回答(2011年3月19日)に続き、-i
フラグをgrepとともに使用して、不要な数千行を除外できます。例:
強力なフィルター -各単体テストの名前と結果、および全体的なビルドステータスのみを表示します。セットアップのエラーまたは例外は表示されません。
./gradlew test -i | grep -E " > |BUILD"
ソフトフィルター -各ユニットテストの名前と結果、セットアップエラー/例外を表示します。ただし、無関係な情報も含まれます。
./gradlew test -i | grep -E -v "^Executing |^Creating |^Parsing |^Using |^Merging |^Download |^title=Compiling|^AAPT|^future=|^task=|:app:|V/InstrumentationResultParser:"
ソフトフィルター、代替構文:(検索トークンは個別の文字列に分割されます)
./gradlew test -i | grep -v -e "^Executing " -e "^Creating " -e "^Parsing " -e "^Using " -e "^Merging " -e "^Download " -e "^title=Compiling" -e "^AAPT" -e "^future=" -e "^task=" -e ":app:" -e "V/InstrumentationResultParser:"
動作の説明:最初のコマンドの出力は、正規表現に基づいて多くの不要な行を./gradlew test -i
除外する2番目のコマンドにパイプされgrep
ます。"-E"
正規表現モードを有効にし、"|"
「または」を意味します。ユニットテストの名前と結果はを使用して表示でき" > "
、全体的なステータスはを使用して表示でき"BUILD"
ます。ソフトフィルターでは、"-v"
フラグは「含まない」を"^"
意味し、「行の先頭」を意味します。したがって、「Executing」または「Creating」で始まるすべての行が削除されます。
Gradle 5.1でのAndroidインストルメンテーションユニットテストの例:
./gradlew connectedDebugAndroidTest --continue -i | grep -v -e \
"^Transforming " -e "^Skipping " -e "^Cache " -e "^Performance " -e "^Creating " -e \
"^Parsing " -e "^file " -e "ddms: " -e ":app:" -e "V/InstrumentationResultParser:"
Gradle 4.10でのJacocoユニットテストカバレッジの例:
./gradlew createDebugCoverageReport --continue -i | grep -E -v "^Executing |^Creating |^Parsing |^Using |^Merging |^Download |^title=Compiling|^AAPT|^future=|^task=|:app:|V/InstrumentationResultParser:"
Kotlin DSLでbuild.gradle.kts
記述されている場合は、テスト結果を印刷できます(私はkotlinマルチプラットフォームプロジェクトを開発しており、「java」プラグインを適用していません)。
tasks.withType<AbstractTestTask> {
afterSuite(KotlinClosure2({ desc: TestDescriptor, result: TestResult ->
if (desc.parent == null) { // will match the outermost suite
println("Results: ${result.resultType} (${result.testCount} tests, ${result.successfulTestCount} successes, ${result.failedTestCount} failures, ${result.skippedTestCount} skipped)")
}
}))
}
test
ました。