我想确保只有在启用了特定测试的情况下,特定的 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()