【发布时间】:2020-12-03 05:16:19
【问题描述】:
我们最近将 Kotlin Spring Boot 项目升级为 Spring Boot 2.3.2,从那时起 gradle 似乎无法再进行任何测试。
我们使用 gradle 包装器 5.6.2 并升级到 6.3,尽管 the documentation 表示 5.6.x 也应该可以工作。 Gradle 升级没有帮助,gradle 仍然无法进行任何测试,当我降级到 2.2.3 时它工作正常。我们正在使用 Kotest、Junit5 和嵌入式 mongodb 进行测试。
plugins {
val kotlinVersion = "1.3.50"
kotlin("jvm") version kotlinVersion
kotlin("plugin.spring") version kotlinVersion
id("org.springframework.boot") version "2.3.2.RELEASE"
id("io.spring.dependency-management") version "1.0.9.RELEASE"
id("jacoco")
}
dependencyManagement {
dependencies {
dependency("net.logstash.logback:logstash-logback-encoder:6.1")
dependency("com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0")
val kotlintestVersion = "3.4.2"
dependency("io.kotlintest:kotlintest-runner-junit5:$kotlintestVersion")
dependency("io.kotlintest:kotlintest-extensions-spring:$kotlintestVersion")
dependency("io.kotlintest:kotlintest-assertions:$kotlintestVersion")
}
}
dependencies {
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
implementation("org.springframework.boot:spring-boot-starter-data-mongodb")
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("org.springframework.boot:spring-boot-starter-actuator")
implementation("org.springframework.boot:spring-boot-starter-security")
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
testImplementation("org.assertj:assertj-core")
testImplementation("org.springframework.boot:spring-boot-starter-test") {
exclude(group = "org.junit.vintage", module = "junit-vintage-engine")
}
testImplementation("org.springframework.amqp:spring-rabbit-test")
testImplementation("org.springframework.security:spring-security-test")
testImplementation("com.nhaarman.mockitokotlin2:mockito-kotlin")
testImplementation("io.kotlintest:kotlintest-runner-junit5")
testImplementation("io.kotlintest:kotlintest-extensions-spring")
testImplementation("io.kotlintest:kotlintest-assertions")
}
val jacocoTask = tasks.withType<JacocoReport> {
reports {
xml.isEnabled = true
}
}
tasks.withType<Test> {
doFirst {
environment("SPRING_DATA_MONGODB_PORT", "${project.mongo.port}")
}
this.extra.set("runWithMongoDb", true)
useJUnitPlatform()
finalizedBy(jacocoTask)
}
mongo {
setPort("RANDOM")
}
val compileKotlin: KotlinCompile by tasks
compileKotlin.kotlinOptions {
freeCompilerArgs = listOf("-XXLanguage:+InlineClasses")
}
任何提示我可能做错了什么?
我们非常简单的测试之一:
@SpringBootTest
@ExperimentalUnsignedTypes
class HardwareServiceApplicationSpec : FunSpec() {
override fun listeners(): List<TestListener> {
return listOf(SpringListener)
}
@Autowired
private lateinit var rmqMessageReceiver: RmqMessageReceiver
init {
test("the messageReceiver bean is created on application startup") {
assertThat(rmqMessageReceiver).isNotNull()
}
}
}
测试的日志输出也对我帮助不大:
> Task :test
file or directory 'C:\Users\Pia Gerhofer\Projects\hw-service-v2\build\classes\java\test', not found
Excluding []
Caching disabled for task ':test' because:
Build cache is disabled
Task ':test' is not up-to-date because:
Task.upToDateWhen is false.
Extracting Mongo binaries...
Starting Mongod 4.0.2 on port 55319...
start de.flapdoodle.embed.mongo.config.MongodConfigBuilder$ImmutableMongodConfig@7f4e7fe1
Mongod started.
file or directory 'C:\Users\Pia Gerhofer\Projects\hw-service-v2\build\classes\java\test', not found
Starting process 'Gradle Test Executor 3'. Working directory: C:\Users\Pia Gerhofer\Projects\hw-service-v2 Command: C:\Program Files\Java\jdk-11.0.5\bin\java.exe -Dorg.gradle.native=false -javaagent:build/tmp/expandedArchives/org.jacoco.agent-0.8.5.jar_6a2df60c47de373ea127d14406367999/jacocoagent.jar=destfile=build/jacoco/test.exec,append=true,inclnolocationclasses=false,dumponexit=true,output=file,jmx=false @C:\Users\Pia Gerhofer\AppData\Local\Temp\gradle-worker-classpath2455123809837509056txt -Xmx512m -Dfile.encoding=windows-1252 -Duser.country=AT -Duser.language=de -Duser.variant -ea worker.org.gradle.process.internal.worker.GradleWorkerMain 'Gradle Test Executor 3'
Successfully started process 'Gradle Test Executor 3'
Gradle Test Executor 3 started executing tests.
> Task :test
~~~ Project Configuration ~~~
Gradle Test Executor 3 STANDARD_OUT
~~~ Project Configuration ~~~
-> Parallelism: 1 thread
-> Parallelism: 1 thread
-> Test order: LexicographicSpecExecutionOrder
-> Test order: LexicographicSpecExecutionOrder
-> Soft assertations: False
-> Soft assertations: False
-> Write spec failure file: False
-> Write spec failure file: False
-> Fail on ignored tests: False
-> Fail on ignored tests: False
-> Extensions
-> Extensions
- io.kotlintest.extensions.SystemPropertyTagExtension
- io.kotlintest.extensions.SystemPropertyTagExtension
- io.kotlintest.extensions.RuntimeTagExtension
- io.kotlintest.extensions.RuntimeTagExtension
Gradle Test Executor 3 finished executing tests.
> Task :test FAILED
所以即使我得到以下信息,我在日志中也没有发现异常或任何其他问题:
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':test'.
> No tests found for given includes: [com.tractive.hwservice.HardwareServiceApplicationSpec](filter.includeTestsMatching)
感谢任何帮助,我已经尝试了各种 gradle 版本,到目前为止没有任何组合有效。一位同事告诉我,我可能必须使用不同的测试运行程序,但我在升级指南/文档中找不到任何相关内容。
有趣的是,我将我们的另一个服务升级到了最新的 spring boot 版本,它使用 gradle wrapper 6.4 并且测试在那里按预期工作。
【问题讨论】:
标签: spring-boot kotlin gradle