我正在尝试使用Cucumber lib编写函数测试,不幸的是,我不能同时使用Cucumber和Gradle,在构建测试时会发生错误。我是Java环境的真正初学者。我使用这个项目: Kotlin / Gradle / Cucumber。
以下是我的build.gradle.kts的样子
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
}
}
}这是错误
* 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谢谢你的帮助。
发布于 2022-03-04 22:41:22
看起来您正在尝试从Groovy转换到Kotlin。请记住,在Kotlin DSL中,所有东西都是强类型的,因为Kotlin是强类型的。
您需要包装tasks { }块中的所有任务创建,以便访问compileTestKotlin。目前,this在您的cucumber任务注册中的作用域是任务本身,它的类型是DefaultTask,它不知道compileTestKotlin。
此外:
不推荐使用
mainClassName,而应该使用mainClass。java扩展为您提供了创建源JAR的能力,因此除非您对JAR有特定的需求,否则不需要自己创建JAR--这似乎不是snippet.cucumber任务的目标是执行Java类,您可以使用JavaExec作为任务类型而不是DefaultTask。
抛光样品(未经测试):
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
}
}参考文献:
https://stackoverflow.com/questions/71353744
复制相似问题