【问题标题】:Gradle can't find tests anymore after Spring Boot upgrade to 2.3.2Spring Boot 升级到 2.3.2 后 Gradle 找不到测试了
【发布时间】: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


    【解决方案1】:

    终于让它与任何 Gradle 版本一起工作,尝试了(5.6.x、6.3、6.4、6.5 和 6.6)。

    我们缺少的是更新 kotlin plugin.spring 版本。在我们将其更新为 1.3.72 而不是 1.3.50 之后,一切都按预期工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-18
      • 2020-05-12
      • 1970-01-01
      • 2021-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-15
      相关资源
      最近更新 更多