我可以使用Gradle检索测试数据依赖关系



我说我在基于Java的Gradle项目中有一个测试用例,该图像需要一个要完成的图像,并且图像很大(〜100MB)。例如,也许测试需要从图像读取像素数据,以便它可以确认某些CV算法正在始终如一地完成。只要将这些数据添加到项目中的目录,例如SRC/test/Data,并使用其他所有内容将数据添加到版本控件中,这将是非常直接的,但是这使得该存储库非常大,并且需要副本也可以将图像签到其他希望使用它的项目。

是否有一种包装此图像的方法,以便将其添加到网络存储库中,例如Nexus或Artifactory,然后使用Gradle依赖机制将其引入项目?如果是这样,我将如何从测试案例中引用图像?

编辑:这是我最终使用的解决方案。

  1. 发布包含测试数据的工件。在这种情况下,我决定实际将多个测试图像捆绑到zip文件中并这样发布。
  2. 将以下内容添加到我的gradle.build文件:

    configurations {
        testData
    }
    dependencies {
        testData group: 'com.company', name: 'testData', version: '1.0', ext: 'zip'
    }
    task unzip(type: Copy) {
        def outputDir = file("${buildDir}/unpacked/dist")
        from {zipTree(configurations.testData.singleFile)}
        into outputDir
    }
    test {
    dependsOn unzip
        systemProperties 'testDataDir': file("${buildDir}/unpacked/dist")
    }
    

    这将添加一种新的配置,以保存测试数据,以及一项新的任务以解压缩数据。请注意,围绕zipTree(configurations.testData.singleFile)的支架很重要,因为它们创建了一个闭合,可确保仅在构建时间解决该路径。没有它们,每当运行构建脚本时,就下载了测试数据,而不仅仅是测试任务是在测试脚本时。那里的最后一个块将测试任务配置为取决于UNZIP ONE,然后将文件的位置传递到测试中作为系统属性。您可以使用System.getProperty("testDataDir")读取测试文件中的属性。因为将UNZIP任务设置为测试任务的依赖性,因此仅在执行测试任务时将文件下载和解压缩。这使正常构建很快。

是的,有一些方法可以使这项工作。例如,您可以将图像发布到Nexus,并使用Gradle的常规依赖关系管理(例如,使用仅伪影符号"some.group:someArtifact:1.0@img")解决。然后,您可以通过系统属性配置test任务将图像的本地文件路径传递到测试。或者,您可以将图像放在测试运行时类路径上,然后通过ClassLoader#getResource

访问它。

正如彼得所说,将其添加为配置依赖性。

image "some.group:someArtifact:1.0@img"

在您的gradle脚本中,将其引用为

configuration.image.singleFile.getPath()

最新更新