假设我在基于 Java 的 Gradle 项目中有一个测试用例,需要提供图像才能完成,并且该图像较大(~100MB)。例如,测试可能需要从图像中读取像素数据,以便确认某些 CV 算法是否一致完成。只需将此数据添加到项目中的目录(例如 src/test/data)中,并将数据与其他所有内容一起 checkin 版本控制中,这将是非常简单的,但这使得存储库非常大,并且需要副本图像也可以 checkin 所有其他希望使用它的项目。
有没有办法打包这个镜像,以便可以将其添加到网络存储库(例如 Nexus 或 Artifactory),然后使用 Gradle 依赖机制拉入项目?如果是这样,我将如何从测试用例中引用图像?
编辑:这是我最终采用的解决方案。
- 发布包含测试数据的 Artifactory 。在本例中,我决定将多个测试图像实际捆绑到一个 zip 文件中并像这样发布。
将以下内容添加到我的 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)
周围的括号很重要,因为它们创建了一个闭包,确保路径仅在构建时解析。如果没有它们,每当运行构建脚本时都会下载测试数据,而不仅仅是在测试任务时下载。其中的最后一个 block 将测试任务配置为依赖于解压缩任务,然后将文件的位置作为系统属性传递到测试中。您可以使用System.getProperty("testDataDir")
读取测试文件中的属性。由于解压任务被设置为测试任务的依赖项,因此只有在执行测试任务时才会下载并解压该文件。这可以保持正常构建的速度。
最佳答案
是的,有很多方法可以实现这一点。例如,您可以将镜像发布到 Nexus 并使用 Gradle 的常规依赖项管理来解析它(例如使用仅 Artifactory 符号 "some.group:someArtifact:1.0@img"
)。然后,您可以配置 test
任务以通过系统属性将图像的本地文件路径传递给测试。或者,您可以将图像放在测试运行时类路径上,并通过 ClassLoader#getResource
访问它。
关于java - 我可以使用 gradle 检索测试数据依赖项吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21270925/