我希望在Gradle中进行功能测试时自动添加一个serverRun任务,因此我添加了一个依赖项:
funcTestTask.dependsOn(serverRun)
这将导致任务运行,无论 funcTestTask 是否运行
:compile
:serverRun
:funcTestTask (and associate compile tasks... etc)
:serverStop
OR
:compile UP-TO-DATE
:serverRun <-- unnecessary
:funcTestTask UP-TO-DATE
:serverStop
启动服务器的成本很高,我只想在functionalTest不是UP-TO-DATE时才启动它,我想要做什么:
if(!funcTestTask.isUpToDate) {
funcTestTask.dependsOn(serverRun)
}
我知道在决定所有输入/输出之前,我无法了解funcTestTask的最新状态,但是我能继承它的“是否最新”检查器吗?
serverRun.outputs.upToDateWhen(funcTestTask.upToDate)
另外一个选择是在FuncTest中先运行ServerRun,但我认为这种做法通常不被赞同?
funcTestTask.doFirst { serverRun.execute() }
有没有一种方法可以在另一个任务之前有条件地运行一个任务?
更新1
尝试将输入/输出设置为相同
serverRun.inputs.files(funcTestTask.inputs.files)
serverRun.outputs.files(funcTestTask.outputs.files)
这似乎会在重新编译时重新运行服务器(很好),在功能测试未更改并成功后跳过重新运行(同样不错),但不会像以下示例一样在测试失败后重新运行测试
:compile
:serverRun
:funcTestTask FAILED
then
:compile UP-TO-DATE
:serverRun UP-TO-DATE <-- wrong!
:funcTestTask FAILED
funcTestTask
是某种类型为Test
的任务?还必须有一些任务来编译这些测试吧? - Mark Vieiratask.state.failure == null
将在成功的任务执行中为true
。 - Mark Vieira