如何跨Gradle项目共享测试类?

Bri*_*boy 9 java gradle

我正在使用Gradle来构建和测试我的项目.我有两个项目:

ProjA  contains      src\test\java\BaseTest.java       
ProjB  contains      src\test\java\MyTest.java

MyTest extends BaseTest
Run Code Online (Sandbox Code Playgroud)

当我跑步时ProjB.gradle,如何让它BaseTest从ProjA 看到这个课程?

我尝试添加:

dependencies {
  testCompile project('ProjA') 
}
Run Code Online (Sandbox Code Playgroud)

但它没有用.

JB *_*zet 23

也许有更好,更简单的方法,更清洁的方式,但我认为你有三个选择.

第一种选择

既然BaseTest是一个实际上是可重用测试库的一部分的类(你在两个项目中都使用它),你可以简单地创建一个testing子项目,其中BaseTest在src/main/java中定义,而不是src/test/java.testCompile其他两个子项目的配置都依赖于project('testing').

第二种选择

在第二个选项中,您将在第一个项目中定义其他工件和配置:

configurations {
  testClasses {
    extendsFrom(testRuntime)
  }
}

task testJar(type: Jar) {
  classifier = 'test'
  from sourceSets.test.output
}

// add the jar generated by the testJar task to the testClasses dependency
artifacts {
  testClasses testJar
}
Run Code Online (Sandbox Code Playgroud)

并且您将依赖于第二个项目中的此配置:

dependencies {
  testCompile project(path: ':ProjA', configuration: 'testClasses')
}
Run Code Online (Sandbox Code Playgroud)

第三种选择

基本上与第二个项目相同,除了它不向第一个项目添加新配置:

task testJar(type: Jar) {
  classifier = 'test'
  from sourceSets.test.output
}

artifacts {
  testRuntime testJar
}
Run Code Online (Sandbox Code Playgroud)

dependencies {
  testCompile project(path: ':one', configuration: 'testRuntime')
}
Run Code Online (Sandbox Code Playgroud)

  • 我得到`无法获取未知属性'testRuntime'用于配置':projA:testClasses'类型为org.gradle.api.internal.artifacts.configurations.DefaultConfiguration`.我在这里错过了什么? (2认同)
  • 对于 Gradle 7+,您需要定义一个新配置。所以第二个选项就OK了。 (2认同)