我们最近升级了Kotlin Spring Boot项目,使之成为Spring Boot 2.3.2,从那时起,gradle似乎再也无法接受任何测试了。
即使the documentation声明5.6.x也应该工作,我们仍使用gradle包装器5.6.2并将其升级到6.3。当我降级到2.2.3时,Gradle升级没有帮助,并且gradle仍然无法接受任何测试。我们正在使用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,并且在那里的测试如期进行。
答案 0 :(得分:0)
最后使它可以与任何Gradle版本一起使用,并尝试使用(5.6.x,6.3、6.4、6.5和6.6)。
我们缺少的是更新Kotlin plugin.spring
版本。在将其更新为1.3.72
而不是1.3.50
之后,一切都按预期运行。