首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当我尝试用Gradle和Cucumber构建测试时出错

当我尝试用Gradle和Cucumber构建测试时出错
EN

Stack Overflow用户
提问于 2022-03-04 15:39:24
回答 1查看 387关注 0票数 0

我正在尝试使用Cucumber lib编写函数测试,不幸的是,我不能同时使用Cucumber和Gradle,在构建测试时会发生错误。我是Java环境的真正初学者。我使用这个项目: Kotlin / Gradle / Cucumber。

以下是我的build.gradle.kts的样子

代码语言:javascript
复制
import org.gradle.jvm.tasks.Jar

plugins {
    application
    `java-library`
    `maven-publish`
    signing
    jacoco
    kotlin("jvm") version "1.3.61"
}

repositories {
    mavenCentral()
}

dependencies {
    implementation(kotlin("stdlib"))

    testImplementation("org.mock-server:mockserver-netty:5.3.0")
    testImplementation("io.cucumber:cucumber-java8:7.0.0")
    testImplementation("io.cucumber:cucumber-junit:7.0.0")
}

tasks.register<Jar>("fatJar") {
    archiveFileName.set("${artifactName}-${artifactVersion}.jar")
    duplicatesStrategy = DuplicatesStrategy.EXCLUDE
    manifest {
      attributes("Main-Class" to application.mainClassName)
    }
    from(configurations.runtimeClasspath.get()
        .onEach { println("Add from dependencies: ${it.name}") }
        .map { if (it.isDirectory) it else zipTree(it) })
    val sourcesMain = sourceSets.main.get()
    sourcesMain.allSource.forEach { println("Add from sources: ${it.name}") }
    from(sourcesMain.output)
}

tasks.register<Jar>("sourcesJar") {
    from(sourceSets.main.get().allJava)
    archiveClassifier.set("sources")
}

tasks.register("cucumber") {
     dependsOn compileTestKotlin
     doLast {
         javaexec {
             main = "io.cucumber.core.cli.Main"
             classpath = configurations.cucumberRuntime + sourceSets.main.output + sourceSets.test.output
         }
     }
}

这是错误

代码语言:javascript
复制
* What went wrong:
Script compilation errors:

  Line 104:      dependsOn compileTestKotlin
                           ^ Unresolved reference: compileTestKotlin

  Line 108:              classpath = configurations.cucumberRuntime + sourceSets.main.output + sourceSets.test.output
                                                    ^ Unresolved reference: cucumberRuntime

  Line 108:              classpath = configurations.cucumberRuntime + sourceSets.main.output + sourceSets.test.output
                                                                                      ^ Unresolved reference: output

  Line 108:              classpath = configurations.cucumberRuntime + sourceSets.main.output + sourceSets.test.output
                                                                                                               ^ Unresolved reference: output

4 errors

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-04 22:41:22

看起来您正在尝试从Groovy转换到Kotlin。请记住,在Kotlin DSL中,所有东西都是强类型的,因为Kotlin是强类型的。

您需要包装tasks { }块中的所有任务创建,以便访问compileTestKotlin。目前,this在您的cucumber任务注册中的作用域是任务本身,它的类型是DefaultTask,它不知道compileTestKotlin

此外:

不推荐使用

  • mainClassName,而应该使用mainClassjava扩展为您提供了创建源JAR的能力,因此除非您对JAR有特定的需求,否则不需要自己创建JAR--这似乎不是snippet.
  • Since的要求-- cucumber任务的目标是执行Java类,您可以使用JavaExec作为任务类型而不是DefaultTask

抛光样品(未经测试):

代码语言:javascript
复制
plugins {
    id("org.jetbrains.kotlin.jvm") version "1.5.31"
    application
}

repositories {
    mavenCentral()
}

configurations {
    register("cucumberRuntime") {
        extendsFrom(testImplementation.get())
    }
}

dependencies {
    implementation(platform("org.jetbrains.kotlin:kotlin-bom"))
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")

    testImplementation(platform("io.cucumber:cucumber-bom:7.2.3"))
    testImplementation("io.cucumber:cucumber-java8")
    testImplementation("io.cucumber:cucumber-junit")
}

java {
    withSourcesJar()
}

application {
    mainClass.set("io.mateo.ExampleKt")
}

tasks {
    register<Jar>("fatJar") {
        archiveFileName.set("foo-bar.jar")
        duplicatesStrategy = DuplicatesStrategy.EXCLUDE
        manifest {
            attributes("Main-Class" to application.mainClass.get())
        }
        from(configurations.runtimeClasspath.get()
                .onEach { println("Add from dependencies: ${it.name}") }
                .map { if (it.isDirectory) it else zipTree(it) })
        val sourcesMain = sourceSets.main.get()
        sourcesMain.allSource.forEach { println("Add from sources: ${it.name}") }
        from(sourcesMain.output)
    }
    register<JavaExec>("cucumber") {
        dependsOn(compileTestKotlin)
        mainClass.set("io.cucumber.core.cli.Main")
        classpath = configurations["cucumberRuntime"] + sourceSets.main.get().output + sourceSets.test.get().output
    }
}

参考文献:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71353744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档