测试Gradle中目录的存在性?

测试Gradle中目录的存在性?,gradle,execution,mkdir,spock,Gradle,Execution,Mkdir,Spock,我有一个目录,我必须在其中放置一些结果,但用户可以配置它 如果目录不存在,我必须创建它。但现在我必须为代码编写测试 getOutputPath()是getter方法 @Optional def outputPath = new File('build/sampleDir') @TaskAction def generate() { if (!getOutputPath().exists()) { project.mkdir(getOutputPath()) }

我有一个目录,我必须在其中放置一些结果,但用户可以配置它 如果目录不存在,我必须创建它。但现在我必须为代码编写测试

getOutputPath()是getter方法

@Optional
def outputPath = new File('build/sampleDir')


@TaskAction
def generate() {
    if (!getOutputPath().exists()) {
        project.mkdir(getOutputPath())
    }
创建在操作闭包中,因此这是在执行阶段执行的,但是如果我尝试:

    ...
    def 'change default outputPath dir'() {
    when:
    someTask.outputPath = new File(project.rootProject.buildDir, "newPath")
    then:
    ....

    expect:
    project.afterEvaluate {
        generateQRFromTextTask.getOutputQRPath().exists() == true
    }
}
让我惊讶的是,这段代码也通过了相同的程序,但是通过了project.gradle.buildFinished{。 如果没有它们,它就失败了。为什么测试通过了afterEvaluate


进行此检查的最佳方法是什么(对于存在的目录?在构造函数中还是?

属性应该用
@OutputDirectory
注释,在这种情况下,将自动创建目录

PS:根据测试的具体性质,
afterEvaluate
可能永远不会触发


PPS:具有默认值的属性不需要用
@Optional

注释。谢谢您的回答和建议。