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

使用Kotlin Gradle DSL向Kotlin项目添加集成测试

商运锋
2023-03-14

我想向Kotlin项目添加一个额外的“源代码集”,该项目将包含集成测试。我看到过一些帖子,其中谈到为香草Java项目或Kotlin做这件事,但使用Groovy而不是Kotlin Gradle DSL。

总之,使用静态编程语言Gradle DSL:

  • 如何添加可以包含Kotlin代码、Java代码的附加“源代码集”

我希望目录结构看起来像:

src
   main
      java
      kotlin
      resources
   test
      java
      kotlin
      resources
   integration
      java
      kotlin
      resources

相关的:

>

  • https://ryanharrison.co.uk/2018/07/25/kotlin-add-integration-test-module.html

    https://www.petrikainulainen.net/programming/gradle/getting-started-with-gradle-integration-testing/

    如何向Gradle添加新的源集?

    谢谢

  • 共有2个答案

    翟凯
    2023-03-14

    必须将以下配置添加到生成中。梯度锉

    configurations {
        integrationTestImplementation.extendsFrom implementation
        integrationTestRuntimeOnly.extendsFrom runtimeOnly
    }
    
    
    dependencies {
        intTestImplementation 'junit:junit:4.12'
        ...
    }
    
    sourceSets {
        integrationTest {
            kotlin {
                compileClasspath += main.output + test.output
                runtimeClasspath += main.output + test.output
                srcDir file('src/integrationTest/kotlin')
            }
        }
    }
    
    task integrationTest(type: Test, dependsOn: []) {
        testClassesDirs = sourceSets.integrationTest.output.classesDirs
        classpath = sourceSets.integrationTest.runtimeClasspath
        useJUnitPlatform()
    }
    

    来源:https://docs.gradle.org/current/userguide/java_testing.html#sec:configuring_java_integration_tests

    戚峻
    2023-03-14

    首先,创建源代码集和配置:

    sourceSets {
        create("intTest") {
            compileClasspath += sourceSets.main.get().output
            runtimeClasspath += sourceSets.main.get().output
        }
    }
    
    val intTestImplementation: Configuration by configurations.getting {
        extendsFrom(configurations.implementation.get())
    }
    
    val intTestRuntimeOnly: Configuration by configurations.getting {
        extendsFrom(configurations.runtimeOnly.get())
    }
    

    然后,创建要运行它们的任务:

    val integrationTest = task<Test>("integrationTest") {
        description = "Runs integration tests"
        group = "verification"
    
        testClassesDirs = sourceSets["intTest"].output.classesDirs
        classpath = sourceSets["intTest"].runtimeClasspath
        shouldRunAfter("test")
    }
    

    此外,还可以添加要由新源集使用的依赖项。例如:

    intTestImplementation("org.junit.jupiter:junit-jupiter-api:$junitVersion")
    intTestRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:$junitVersion")
    
     类似资料:
    • 我在我的项目中使用ActionBarSherlock,有时需要在操作栏中添加一个或多个项。 在这个BaixadosFragment类(扩展了SherlockFragment)中,我使用了以下代码,它运行良好: [编辑]根据Droidt的建议,这奏效了:

    • 我在Java的早期版本中使用了Maven,但现在我正试图让它在Java 10中工作。我构建了一个简单的Hello world项目,具体来说: 公共课堂测试{ }使用模块信息类: 模块maven.test{导出main;} 与本项目相关的pom为: http://maven.apache.org/xsd/maven-4.0.0.xsd" 当我构建项目时,它成功构建。然后,我从Maven中央存储库添加

    • 我正在开发一个自动化流程,它应该接受组和服务帐户,并将它们作为成员添加到GCP中的子网中。为此,我正在使用terraform资源“google_compute_subnetwork_iam_member”。 根据其留档(下面的链接),terraform应该在应用仅包含新成员的配置文件时为子网保留以前的成员。但是当我应用配置时,它会破坏所有以前的成员并添加新成员。如果我错过了什么请让我知道 Terr

    • 我有一个Gradle插件,可以按预期编译和工作。我想与源代码一起发布一个使用Gradle插件的示例应用程序,它还允许我轻松测试插件的更改。现在要做到这一点,我必须向buildScript块添加一个类路径依赖项。是否可以添加将与示例项目一起编译的依赖本地插件?我现在面临的主要问题是,当尝试同步示例项目时,插件不存在,导致失败。

    • 找到解决方案-检查底部 我知道有很多与我类似的问题,但我已经为此工作了几天,不知道如何让它工作。 我正在尝试将谷歌播放服务合并到我的应用程序中,以使用推送通知。 以下是我到目前为止所做的: > < li >创建了一个全新的项目 < li >导入“google-play-services_lib”并选择“将项目复制到工作区” < li >进入项目- proguard.config=${sdk.dir