如何仅在此给定测试在 gradle 测试阶段激活时才运行特定的 gradle 任务?



我想确保只有在启用了特定测试的情况下,特定的 gradle 任务才会在测试之前运行。

例如,假设我有一个名为TranslationTests的测试,看起来像这样:

@EnabledIfSystemProperty(named = "org.shabunc.tests.TranslationTests", matches = "true")
class TranslationTests {
...
}

通过以下方式激活:

test {
if (project.hasProperty(projectProperty)) {
systemProperty(projectProperty, "org.shabunc.tests.TranslationTests")
}
} 

现在我想确保每次跑步时:

gradle test -Porg.shabunc.tests.TranslationTests

在测试一些特定的 gradle 任务之前,假设触发了gradle prepareTranslationSetup。严格来说,我希望每次我知道翻译测试正在运行时都会触发此任务 - 否则不要触发。

您可以在任务prepareTranslationSetup上使用onlyIf(),并使test依赖它。onlyIf()定义如下:

可以使用onlyIf()方法将谓词附加到任务。仅当谓词的计算结果为 true 时,才会执行任务的操作。

(来自:创作任务(

假设您有以下任务:

task doBeforeTest {
onlyIf {
project.hasProperty("runit")
}
doLast {
println "doBeforeTest()"
}
}
task runTest {
dependsOn = [ doBeforeTest ]
doLast {
println "runTest()"
}
}

仅当项目具有指定的属性时,才会执行doBeforeTest的操作。runTest配置为依赖于doBeforeTest。现在,当你这样做时

gradlew runTest --info

输出类似于

> Task :doBeforeTest SKIPPED
Skipping task ':doBeforeTest' as task onlyIf is false.
> Task :runTest
runTest()

如您所见,由于未满足前提条件,因此跳过doBeforeTest。另一方面,跑步

gradlew runTest -Prunit

按预期执行doBeforeTest

> Task :doBeforeTest
doBeforeTest()
> Task :runTest
runTest()

最新更新