Java 为测试添加多个源测试目录

Java 为测试添加多个源测试目录,java,gradle,Java,Gradle,我有一个具有以下目录结构的项目: src/main/java src/main/resources src/test/java src/test/resources 我想添加一个新文件夹,integrationTest: src/integrationTest/java src/integrationTest/resources 我希望将集成测试与单元测试完全分开。我应该如何添加这个?在build.gradle中,我不确定如何指定一个新任务,该任务将选择此文件夹构建它并单独运行测试。grad

我有一个具有以下目录结构的项目:

src/main/java
src/main/resources
src/test/java
src/test/resources
我想添加一个新文件夹,
integrationTest

src/integrationTest/java
src/integrationTest/resources

我希望将集成测试与单元测试完全分开。我应该如何添加这个?在build.gradle中,我不确定如何指定一个新任务,该任务将选择此文件夹构建它并单独运行测试。

gradle有一个
源代码集的概念,这正是您在这里需要的。您在Java插件文档中有关于此的详细文档:

您可以在
build.gradle

sourceSets {
    integrationTest {
        java {
            compileClasspath += main.output + test.output
            runtimeClasspath += main.output + test.output
            srcDir file('src/integration-test/java')
        }
        resources.srcDir file('src/integration-test/resources')
    }
}
这将自动创建新配置
integrationTestCompile
integrationTestRuntime
,可用于定义新任务
integrationTests

task integrationTest(type: Test) {
    testClassesDirs = sourceSets.integrationTest.output.classesDirs
    classpath = sourceSets.integrationTest.runtimeClasspath
}   

供参考:可在此处找到一个完整的工作示例:

请将新创建的源文件夹也添加到build.gradle中的源集,如下所示:

sourceSets {
  main {
    java {
      srcDirs = ['src']
    }
  }

  test {
    java {
      srcDirs = ['test']
    }
  }
  integrationTest {
    java {
      srcDirs = ['integrationTest']
    }
  }
}

干杯

如何创建只运行这些测试的任务?我更新了答案。您还应该阅读我提到的完整文章,其中提供了完整的步骤(配置这两种配置之间的依赖关系,它应该从“testCompile”和“testRuntim”扩展,并在“check”中包含“integrationTest”任务)生命周期任务groovy compileClasspath+=sourceSets.test.compileClasspath runtimeClasspath+=sourceSets.test.runtimeClasspath
Gradle还从测试中获取所有依赖项