Gradle 集成测试套件取决于 testImplementation 依赖项

Luk*_*kas 11 jvm gradle

我正在尝试迁移到Gradle 7.3 中引入的测试套件。我想做的是将testImplementation依赖项添加到我的集成测试中。

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

        val integrationTest by registering(JvmTestSuite::class) { 
            dependencies {
                implementation(project) // This adds dependencies to the prod code
                // What to add to automatically use testImplementation deps?
            }
            ...
 
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Chr*_*iki 18

您\xe2\x80\x99d 可能喜欢让integrationTestImplementation配置扩展testImplementation配置\xe2\x80\x93,就像默认情况下testImplementation已经扩展一样implementation另请参阅有关配置继承的文档。

\n

Here\xe2\x80\x99s 是一个独立的示例(使用 Gradle 7.3.2 进行测试):

\n
plugins {\n    `java-library`\n}\n\nrepositories {\n    mavenCentral()\n}\n\ntesting {\n    suites { \n        val test by getting(JvmTestSuite::class) { \n            useJUnitJupiter() \n            dependencies {\n                implementation("org.assertj:assertj-core:3.21.0")\n            }\n        }\n\n        val integrationTest by registering(JvmTestSuite::class) { \n            dependencies {\n                // TODO add any integration test only dependencies here\n            }\n        }\n    }\n}\n\n// Here\xe2\x80\x99s the bit that you\xe2\x80\x99re after:\nval integrationTestImplementation by configurations.getting {\n    extendsFrom(configurations.testImplementation.get())\n}\n
Run Code Online (Sandbox Code Playgroud)\n

如果您在配置了配置继承的情况./gradlew dependencies --configuration integrationTestRuntimeClasspath 运行,那么您\xe2\x80\x99将获得以下输出(缩写):

\n
integrationTestRuntimeClasspath - Runtime classpath of source set \'integration test\'.\n+--- org.junit.jupiter:junit-jupiter:5.7.2\n|    +--- org.junit:junit-bom:5.7.2\n|    |    \xe2\x80\xa6\n|    +--- org.junit.jupiter:junit-jupiter-api:5.7.2\n|    |    \xe2\x80\xa6\n|    +--- org.junit.jupiter:junit-jupiter-params:5.7.2\n|    |    \xe2\x80\xa6\n|    \\--- org.junit.jupiter:junit-jupiter-engine:5.7.2\n|         \xe2\x80\xa6\n\\--- org.assertj:assertj-core:3.21.0\n
Run Code Online (Sandbox Code Playgroud)\n

但是,如果您在没有配置继承的情况下运行相同的命令,则\xe2\x80\x99 将获得以下输出(缩写)\xe2\x80\x93 请注意缺少的org.assertj:assertj-core:3.21.0依赖项:

\n
integrationTestRuntimeClasspath - Runtime classpath of source set \'integration test\'.\n\\--- org.junit.jupiter:junit-jupiter:5.7.2\n     +--- org.junit:junit-bom:5.7.2\n     |    \xe2\x80\xa6\n     +--- org.junit.jupiter:junit-jupiter-api:5.7.2\n     |    \xe2\x80\xa6\n     +--- org.junit.jupiter:junit-jupiter-params:5.7.2\n     |    \xe2\x80\xa6\n     \\--- org.junit.jupiter:junit-jupiter-engine:5.7.2\n
Run Code Online (Sandbox Code Playgroud)\n
\n

根据答案评论中的要求,here\xe2\x80\x99s 另外一种使单元测试套件中的测试数据类可用于集成测试的方法:

\n
sourceSets.named("integrationTest") {\n    java {\n        val sharedTestData = project.objects.sourceDirectorySet("testData",\n                "Shared test data")\n        sharedTestData.srcDir("src/test/java")\n        sharedTestData.include("com/example/MyData.java")\n        source(sharedTestData)\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n