【问题标题】:gradle build not skipping (always invoking) integration testgradle build 不跳过(总是调用)集成测试
【发布时间】:2023-03-19 12:49:01
【问题描述】:

我的应用程序结构的上下文:

  1. root 上没有任何内容,只有 settings.gradle 和 build.gradle 具有最小的依赖性。
  2. 有很多模块/子项目,其中一个名为 xyzintegrationtest(xyz 是假的示例名称)
  3. 集成测试模块 xyzintegrationtest 有 src/main、src/test 和 src/integrationtest
  4. src/main 和 src/test 为空。 src/intgerationtest 有使用 junit 的集成测试。
  5. 项目 xyzintegrationtest 依赖于所有项目(隐式)
  6. integrationtest build.gradle 文件有以下任务:

任务集成测试(类型:测试){
......
}

现在,当我在根项目上进行 gradle build(或 gradlew build)时,我希望所有项目都能编译,并且所有单元测试都在每个子项目的 src/test 下运行。但它也在调用这个 integrationTest 任务,并使集成测试也运行。更令人惊讶的是,它偶尔发生,并非始终如一。我什至尝试过 gradle build -x integrationTest,但它仍然可以运行。

所以问题是:

  1. gradle build 是否运行所有类型为 test 的任务?那我怎么能有只在我显式调用它时才运行的任务。
  2. 如果第一个不应该发生,是 gradle 中的错误吗?
  3. 我做错了吗?结构非常扁平,所有模块/子项目在同一级别,任务名称非常清晰,type:test。

谢谢。

【问题讨论】:

    标签: gradle integration-testing


    【解决方案1】:
    1. 如果您应用了例如 java 插件并运行 Gradle 任务测试,则所有测试任务都将被执行。您的集成测试运行而特别排除它可能与Gradle build lifcycle 有关。您可能将代码直接放在配置块中,而不是放在执行块中。比如:

      task integrationTest(type: Test) {
          println 'This will print while in the configuration fase.'
          doLast {
              println 'This will print while the task is beeing executed.'
          }
      }
      

      如果不需要配置,你也可以这样做:

      task integrationTest(type: Test) << {
          println 'This will print while the task is beeing executed.'
      }
      

      这一切都可以在Gradle User GuideBuild Scripting Basics 章节中找到,如果使用 Gradle,这将非常有用。

    2. 所以如果我正确理解您的问题和情况,这可能不是 Gradle 中的错误。

    3. 请参见第 1 点,您似乎混淆了配置和执行方式。

    【讨论】:

    • 谢谢,由于某种原因,当我调用 gradle integrationTest 时它甚至没有运行,它从未运行过测试。然而,以下帮助我完成了工作:check.dependsOn -= integrationTest
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    • 2014-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多