【问题标题】:Test for created file with Spock in Gradle在 Gradle 中使用 Spock 测试创建的文件
【发布时间】:2014-09-24 12:40:32
【问题描述】:

我有生成图片的任务,所以我想为它编写测试,将这个图片二进制文件与 resource 文件夹中的 之前生成的图片 进行比较。

def setupSpec() {
   project = ProjectBuilder.builder().build()
   generatePicTask = project.tasks.create(SomePlugin.GENERATE_PIC_TASK_NAME, GeneratePicTask)
}

def 'create Picture test'() {
 when:
   File fileName = new File("Info")
 then:
    generatePicTask.createPicture(fileName)
 expect:
    fileName.exists()==true
}

但是有错误

C:\Users\User\AppData\Local\Temp\gradle1393280218367058727projectDir\build\Info.PNG 
(The system cannot find the path specified)

图片是在任务generatePicTask中的actionclosure中生成的。

项目对象是虚拟项目,所以我什至不知道它是否已执行。我该如何解决这个问题?

【问题讨论】:

标签: image file testing gradle spock


【解决方案1】:

我发现您当前的方法存在 3 个问题:

您的测试不应依赖于当前工作目录。因此,不要像这样创建文件:

File fileName = new File("Info")

例如使用 junit TemporaryFolder 规则。看一下 使用例如http://garygregory.wordpress.com/2010/01/20/junit-tip-use-rules-to-manage-temporary-files-and-folders/了解更多详情

GeneratePicTask 任务似乎没有生成 'build' 目录

确保输出目录(创建的图像的父文件夹存在)。您可以使用 gradle 注释,例如@OuputDirectory 让 gradle 处理这个问题。否则在生成图像之前,请执行“fileName.parentfile.mkdirs”之类的操作

一般来说,要走的路是将你的任务和任务执行的配置分开:

generatePicTask.setPicture(fileName)
generatePicTask.create() // your @TaskAction annotated method

干杯, 雷内

【讨论】:

    猜你喜欢
    • 2015-07-08
    • 2016-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多