Idea Gradle集成将类添加为测试源树,但不包括在测试源集中

rseugnpd  于 2023-02-15  发布在  其他
关注(0)|答案(2)|浏览(86)

我想把systemsourceSet中的类标记为单元测试类,我试着用下面的代码来标记它们:

sourceSets {
  main {
    groovy {
      srcDirs = [
              'src/main/masks'
    }

    resources {
      srcDirs += 'src/main/journaltemplates'
    }
  }

  /* This brings up systest in the test resources */
  test.java.srcDir 'src/systest/java'
  test.resources.srcDir 'src/systest/resources'

  systest {
    java {
      srcDirs = ['src/systest/java']
    }

    resources {
      srcDirs = ['src/systest/resources']
    }
  }
}

使用此解决方案时,源集被标记为单元测试类,但被额外添加到测试源集中,这是不需要的。我希望将类保留在系统源集中,并指定系统源集是单元测试源集。我希望系统源集的行为与测试源集的行为相同,但它们应该是不同的源集。
我尝试的第二个解决方案是使用用于gradle的idea插件并修改模块设置,如in this SO post所示:

idea {
  module {
    testSourceDirs += file('src/systest')
  }
}

这个解决方案的问题是systemst源代码也被添加到了testsourceSet中。
希望这已经足够清楚了,否则请发表评论。谢谢。

0md85ypi

0md85ypi1#

请尝试此配置:

apply plugin: "idea"
sourceSets {
    systest {

        java {
            compileClasspath = test.output + main.output
            runtimeClasspath = output + compileClasspath 
        }
    }

}

idea {
    module {
        testSourceDirs = sourceSets.systest.allSource.srcDirs
    }
}
vwhgwdsa

vwhgwdsa2#

Gradle有一个名为Declarative Test Suite的专用功能支持这种情况:

testing {
    suites {
        val test by getting(JvmTestSuite::class) {
            useJUnitJupiter()
        }

        register("integrationTest", JvmTestSuite::class) {
            dependencies {
                implementation(project())
            }

            targets {
                all {
                    testTask.configure {
                        shouldRunAfter(test)
                    }
                }
            }
        }
    }
}

更多信息:www.example.comhttps://docs.gradle.org/current/userguide/java_testing.html#sec:configuring_java_integration_tests

相关问题