我想看测试结果(系统)。out/err,来自正在测试的组件的日志消息),因为它们运行在我运行的同一控制台:

gradle test

不要等到测试完成才查看测试报告(测试报告仅在测试完成时生成,因此在运行测试时不能“尾部-f”任何内容)


当前回答

添加此构建。Gradle停止Gradle吞下stdout和stderr。

test {
    testLogging.showStandardStreams = true
}

这里有记录。

其他回答

添加此构建。Gradle停止Gradle吞下stdout和stderr。

test {
    testLogging.showStandardStreams = true
}

这里有记录。

对于那些使用Kotlin DSL的用户,你可以这样做:

tasks {
  named<Test>("test") {
    testLogging.showStandardStreams = true
  }
}

如果你有一个用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)")
        }
    }))
}

对于那些使用Kotlin DSL的人来说,一个更全面的回应是:

subprojects {
    // all the other stuff
    // ...
    tasks.named<Test>("test") {
        useJUnitPlatform()
        setupTestLogging()
    }
}

fun Test.setupTestLogging() {
    testLogging {
        events(
            org.gradle.api.tasks.testing.logging.TestLogEvent.FAILED,
            org.gradle.api.tasks.testing.logging.TestLogEvent.PASSED,
            org.gradle.api.tasks.testing.logging.TestLogEvent.SKIPPED,
            org.gradle.api.tasks.testing.logging.TestLogEvent.STANDARD_OUT,
        )
        exceptionFormat = org.gradle.api.tasks.testing.logging.TestExceptionFormat.FULL
        showExceptions = true
        showCauses = true
        showStackTraces = true

        addTestListener(object : TestListener {
            override fun beforeSuite(suite: TestDescriptor) {}
            override fun beforeTest(testDescriptor: TestDescriptor) {}
            override fun afterTest(testDescriptor: TestDescriptor, result: TestResult) {}
            override fun afterSuite(suite: TestDescriptor, result: TestResult) {
                if (suite.parent != null) { // will match the outermost suite
                    val output = "Results: ${result.resultType} (${result.testCount} tests, ${result.successfulTestCount} passed, ${result.failedTestCount} failed, ${result.skippedTestCount} skipped)"
                    val startItem = "|  "
                    val endItem = "  |"
                    val repeatLength = startItem.length + output.length + endItem.length
                    val messages = """
                        ${(1..repeatLength).joinToString("") { "-" }}
                        $startItem$output$endItem
                        ${(1..repeatLength).joinToString("") { "-" }}
                    """.trimIndent()
                    println(messages)
                }
            }
        })
    }
}

这应该产生一个接近@odemolliens answers的输出。

stefanglase回答:

向构建中添加以下代码。Gradle(1.1版起)可以很好地输出通过、跳过和失败的测试。

test {
    testLogging {
        events "passed", "skipped", "failed", "standardOut", "standardError"
    }
}

我还想说的是(我发现这对初学者来说是个问题),gradle test命令对每个更改只执行一次测试。

因此,如果您第二次运行它,测试结果将没有输出。你也可以在建筑输出中看到这一点:gradle然后在测试中显示“最新”。所以它不是第n次执行。

聪明的格拉德尔!

如果你想强迫测试用例运行,使用gradle cleanTest test。

这有点离题,但我希望它能帮助到一些新手。

edit

正如sparc_spread在评论中所说:

如果你想强迫gradle总是运行新的测试(这可能并不总是一个好主意),你可以添加输出。upToDateWhen {false} to testLogging{[…]]}。继续阅读这里。

和平。