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

时间:2019-12-06 13:59:12

标签: 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。严格来说,我希望每次知道TranslationTests正在运行时都触发此任务-否则不要触发。

1 个答案:

答案 0 :(得分:1)

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

  

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

(发件人:Authoring Tasks

示例

假设您有以下任务:

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()