gradle - 在Gradle中测试目录是否存在?

标签 gradle execution mkdir spock

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

getOutputPath()是getter方法

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


@TaskAction
def generate() {
    if (!getOutputPath().exists()) {
        project.mkdir(getOutputPath())
    }

创建在Action闭包中,因此可以在执行阶段执行,但是如果我尝试执行以下操作:
    ...
    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 {
没有他们,它就会失败。为什么在评估之后测试通过通过?

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

最佳答案

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

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

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

关于gradle - 在Gradle中测试目录是否存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25062543/

相关文章:

java - 从 Java 中的字符串执行代码

c++ - 函数执行失败后的代码 - C++

directory - OCaml 相当于 "mkdir -p"是什么?

javascript - 如何使用 fs.mkdir 在 Node js 中创建目录?

maven - 使用 Gradle-Artifactory 插件发布子项目

java - 任务 ':app:dexDebug'的执行失败。用非零退出值2结束

android - 从一个项目生成多个 APK

c++ - 如何验证 pthread 函数是否开始执行

android - 无法在 SD 卡上创建文件夹 - mkdir 总是返回 false

android - Gradle插件或使用选定 Artifact 打包jar文件的任何解决方案