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

ayu*_*hgp 4 java gradle

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

src/main/java
src/main/resources
src/test/java
src/test/resources
Run Code Online (Sandbox Code Playgroud)

我想添加一个新文件夹integrationTest

src/integrationTest/java
src/integrationTest/resources
Run Code Online (Sandbox Code Playgroud)

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

M.R*_*uti 6

Gradle 有一个概念,source sets这正是您在这里所需要的。您在此处的Java 插件文档中有详细的文档:https ://docs.gradle.org/current/userguide/building_java_projects.html#sec:java_source_sets

您可以定义一个新的源集“integrationTest” 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')
    }
}
Run Code Online (Sandbox Code Playgroud)

这将自动创建新的配置 integrationTestCompileintegrationTestRuntime,你可以用它来定义一个新的任务 integrationTests

task integrationTest(type: Test) {
    testClassesDirs = sourceSets.integrationTest.output.classesDirs
    classpath = sourceSets.integrationTest.runtimeClasspath
}   
Run Code Online (Sandbox Code Playgroud)

供参考:可以在此处找到一个完整的工作示例:https : //www.petrikainulainen.net/programming/gradle/getting-started-with-gradle-integration-testing/

  • 使用 ```groovycompileClasspath += sourceSets.test.compileClasspath runtimeClasspath += sourceSets.test.runtimeClasspath ``` Gradle 也会从测试中获取所有依赖项,效果会更好 (3认同)

bei*_*ish 5

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

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

  test {
    java {
      srcDirs = ['test']
    }
  }
  integrationTest {
    java {
      srcDirs = ['integrationTest']
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

干杯!