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

标签 spring unit-testing gradle task gradle-task

我有一个 Spring 项目,我在其中编写了一些单元和集成测试。现在我想创建自定义任务来运行所有单元测试、所有集成测试和一个运行两者的任务。但是我该怎么做呢?

最佳答案

我建议将集成测试分成单独的源集。默认情况下,您已经有 2 个源集,一个用于生产代码,另一个用于测试。要创建新的源集(在 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 个任务可用:
  • gradlew test
  • gradlew integrationTest
  • gradlew check - 运行两者,因为它依赖于扩展
  • 的测试任务

    如果您也在使用 jacoco 并希望合并测试结果,那么您可以执行以下任务:
    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
    

    关于spring - 如何创建 Gradle 任务以在 Spring 中仅运行特定的测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59020190/

    相关文章:

    spring - 如何保存关于 rest CRUD API 的事务日志?

    java - 将 Spring MVC 与 MySql 连接

    c - 如何对 PostgreSQL C 语言函数进行单元测试

    java - Selenium IDE-自动将html转换为junit

    android - 使用mikepenz/MaterialDrawer库解决依赖项时出错

    java - Gradle:从测试源集中的主源集中覆盖类

    java - 私有(private)静态类 Spring bean 注释 @Service 可以 Autowiring 吗?

    java - 如何动态更改 application.properties 中的参数,以便可以使用新值来触发计划作业

    unit-testing - 单元测试类的最大长度?

    asp.net-mvc - ASP.NET MVC 单元测试 - 虚假存储库变得笨拙