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

gradle test

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


当前回答

只需将以下闭包添加到build.gradle中。每次测试执行之后,输出都会被打印出来。

test{
    useJUnitPlatform()
    afterTest { desc, result ->
        def output = "Class name: ${desc.className}, Test name: ${desc.name},  (Test status: ${result.resultType})"
        println( '\n' + output)
    }
}

其他回答

在Gradle使用Android插件:

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]。结果为SUCCESS

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

test {
    testLogging.showStandardStreams = true
}

这里有记录。

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{[…]]}。继续阅读这里。

和平。

'test'任务不适用于Android插件,对于Android插件使用以下方法:

// Test Logging
tasks.withType(Test) {
    testLogging {
        events "started", "passed", "skipped", "failed"
    }
}

详见:https://stackoverflow.com/a/31665341/3521637

我为Kotlin DSL编写了一个测试记录器。您可以将此块放在项目范围build.gradle.kts文件中。

subprojects {
    tasks.withType(Test::class.java) {
        testLogging {
            showCauses = false
            showExceptions = false
            showStackTraces = false
            showStandardStreams = false

            val ansiReset = "\u001B[0m"
            val ansiGreen = "\u001B[32m"
            val ansiRed = "\u001B[31m"
            val ansiYellow = "\u001B[33m"

            fun getColoredResultType(resultType: ResultType): String {
                return when (resultType) {
                    ResultType.SUCCESS -> "$ansiGreen $resultType $ansiReset"
                    ResultType.FAILURE -> "$ansiRed $resultType $ansiReset"
                    ResultType.SKIPPED -> "$ansiYellow $resultType $ansiReset"
                }
            }

            afterTest(
                KotlinClosure2({ desc: TestDescriptor, result: TestResult ->
                    println("${desc.className} | ${desc.displayName} = ${getColoredResultType(result.resultType)}")
                })
            )

            afterSuite(
                KotlinClosure2({ desc: TestDescriptor, result: TestResult ->
                    if (desc.parent == null) {
                        println("Result: ${result.resultType} (${result.testCount} tests, ${result.successfulTestCount} passed, ${result.failedTestCount} failed, ${result.skippedTestCount} skipped)")
                    }
                })
            )
        }
    }
}