如何在Gradle的两个测试套件中引入testcommons源码集?
将testcommons源码集添加到test和itest测试套件的两种方案
方案1:直接合并源码目录
这种方式会让test和itest源码集直接包含testcommons的源码文件,相当于把testcommons的代码视为test/itest自身代码的一部分。修改你的sourceSets配置如下:
sourceSets { test { // 追加testcommons的Java源码目录 java.srcDirs += sourceSets.testcommons.java.srcDirs // 如果testcommons有资源文件,可追加以下配置 // resources.srcDirs += sourceSets.testcommons.resources.srcDirs } itest { java.srcDirs += sourceSets.testcommons.java.srcDirs // resources.srcDirs += sourceSets.testcommons.resources.srcDirs } testcommons{ java{ srcDir 'src/testcommons/java' } } }
方案2:通过依赖配置引入(推荐)
这种方式更贴合Gradle的模块化设计原则——testcommons作为独立源码集编译,test和itest通过依赖引入它的编译产物,同时自动继承它的依赖配置,适合testcommons有自身依赖的场景。
步骤1:完善testcommons源码集配置
保留原有sourceSets.testcommons配置,若testcommons有专属依赖,可单独配置:
sourceSets { testcommons{ java{ srcDir 'src/testcommons/java' } } } // 示例:给testcommons添加专属依赖(按需配置) dependencies { testcommonsImplementation 'org.junit.jupiter:junit-jupiter-api:5.9.2' }
步骤2:让test和itest引入testcommons
修改testing.suites中的依赖配置,让两个测试套件都加载testcommons的编译产物及依赖:
testing { suites { test { useJUnitJupiter() dependencies { // 引入testcommons的编译产物 implementation sourceSets.testcommons.output // 继承testcommons的依赖配置 implementation.extendsFrom sourceSets.testcommons.implementationConfigurationName } } itest(JvmTestSuite) { testType = TestSuiteType.INTEGRATION_TEST dependencies { implementation project() // 引入testcommons的编译产物 implementation sourceSets.testcommons.output // 继承testcommons的依赖配置 implementation.extendsFrom sourceSets.testcommons.implementationConfigurationName } configurations { itestImplementation.extendsFrom testImplementation itestRuntime.extendsFrom testRuntime itestRuntimeOnly.extendsFrom testRuntimeOnly } } } }
方案说明
- 方案2的优势在于testcommons代码仅编译一次,避免重复编译,且它的依赖可独立管理,不会与test/itest的依赖混淆。
- 若testcommons仅需共享代码、无专属依赖,两种方案均可,但方案2更符合Gradle最佳实践。
内容的提问来源于stack exchange,提问作者dev-rifaii
相关产品推荐
相关产品推荐

