当前位置: 首页 > 知识库问答 >
问题:

如何创建Gradle任务以在Spring中只运行特定的测试

方昊阳
2023-03-14

我有一个Spring项目,在那里我编写了一些单元和集成测试。现在我要创建用于运行所有单元测试、所有集成测试的自定义任务和用于运行两者的一个任务。但我怎么能这样做呢?

共有1个答案

堵宏毅
2023-03-14

我建议将集成测试分离到单独的源集中。默认情况下,您已经有两个源集,一个用于生产代码,一个用于测试。创建新的源集(在src/integrationtest/java下创建新目录),并使用JUnit5添加以下配置:

test {
  useJUnitPlatform()
}

sourceSets {
  integrationTest {
    java.srcDir file("src/integrationTest/java")
    resources.srcDir file("src/integrationTest/resources")
    compileClasspath += sourceSets.main.output + configurations.testRuntime
    runtimeClasspath += output + compileClasspath
  }
}

对于单独的任务:

task integrationTest(type: Test) {
  description = 'Runs the integration tests.'
  group = 'verification'
  testClassesDirs = sourceSets.integrationTest.output.classesDirs
  classpath = sourceSets.integrationTest.runtimeClasspath

  useJUnitPlatform()

  reports {
    html.enabled true
    junitXml.enabled = true
  }
}

现在您有3个可用任务:

    null
task coverageMerge(type: JacocoMerge) {
  destinationFile file("${rootProject.buildDir}/jacoco/test.exec")
  executionData fileTree(project.rootDir.absolutePath).include("**/build/jacoco/*.exec")
}

// aggregate all coverage data at root level
if (tasks.findByName("test")) {
  tasks.findByName("test").finalizedBy coverageMerge
}

if (tasks.findByName("integrationTest")) {
  tasks.findByName("integrationTest").finalizedBy coverageMerge
}

task codeCoverageReport(type: JacocoReport) {
  executionData fileTree(project.rootDir.absolutePath).include("**/build/jacoco/*.exec")
  subprojects.each {
    if (!it.name.contains('generated')) {
      sourceSets it.sourceSets.main
    }
  }
  reports {
    xml.enabled true
    html.enabled true
    html.setDestination(new File("${buildDir}/reports/jacoco"))
    csv.enabled false
  }
}
gradlew codeCoverageReport
 类似资料:
  • 使用Gradle及其JUnit4支持,我可以使用选项选择特定的测试,如下所示: 在使用JUnit5 Gradle任务时,此选项无效。当从命令行使用任务时,它会被无人值守地忽略。真正的工作是由完成的,它不支持以下选项: JUnit5插件支持选择特定的测试吗?

  • 我有一组可以以任何顺序运行的分级任务,我将它们分组为3个集a、B和C 有办法运行特定的任务组吗?就像我只想运行一个,一个B,可能是一个和一个B的组合

  • 我正在使用带有sonarqube插件的Gradle并使用 然而,它调用了内置的“测试”任务,该任务运行所有类型的测试,包括目前尚未全部通过的集成测试。我希望能够指定sonarqube任务使用类似“unitTest”的任务,而不是运行所有内容的“test”任务。 团队中的其他人在IDE中运行cucumber测试,IDE也使用测试任务,因此当前当我在主“测试”任务中排除cucumber测试时,他们必须

  • 我在build.gradle中创建了一个新的gradle任务: 哪个应该运行rerun.sh: 我使用IntelliJ作为IDE。如何运行此任务? 我尝试在zshell控制台中运行并收到此错误: gradle调用CL zsh:找不到命令:gradle 但是在 IDE 中,我一直使用 gradle,因此必须安装它。 我怎么才能解决这个问题?我的写作还好吗?

  • 我有一个gradle项目,其中“单元测试”和“集成测试”任务定义如下: 我在IntelliJ中创建了一个运行配置来运行所有单元测试,如图像显示: 并对任务“integrationTest”执行了相同的操作: IntelliJ“理解”测试任务并运行它,显示图形结果,如下图所示: 当它运行“集成测试”任务时不会发生同样的情况。结果以文本形式显示,就像我通过命令行运行任务时一样。

  • 我正在使用Eclipse Buildship插件在我的项目上执行Gradle任务。知道如何在运行构建任务时排除测试任务吗?在Gradle STS插件中,我曾经将程序参数更新为'-x test',它跳过了测试任务。当我在Buildship上尝试同样的方法时,得到了下面的错误。