当前位置: 首页 > 知识库问答 >
问题:

Spring Boot升级到2.3.2后,Gradle再也找不到测试了

师承弼
2023-03-14

我们最近升级了我们的Kotlin Spring Boot项目,使之成为Spring Boot2.3.2,从那以后,gradle似乎再也无法进行任何测试了。

我们使用的是 gradle 包装器 5.6.2 并升级到 6.3,尽管文档指出 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)

感谢您的帮助,我已经尝试了各种不同的渐变版本,到目前为止没有任何组合有效。一位同事告诉我,我可能需要使用不同的测试运行程序,但我在升级指南/文档中找不到任何与此相关的内容。

有趣的是,我将我们的另一个服务升级到最新的Spring启动版本,它使用gradle包装器6.4,并且测试在那里按预期工作。

共有1个答案

郏兴贤
2023-03-14

最后让它适用于任何 Gradle 版本,尝试使用(5.6.x、6.3、6.4、6.5 和 6.6)。

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

 类似资料:
  • 我用Play2.0创建了一个应用程序。我实现了scribe-java库来使用一些OAuth服务。直到今天,一切都很好,但当我升级jdk并重新启动服务器时,我不能使用scribe-java库。它似乎在sun.security包中使用了和类,但找不到。 “java-version”返回: 播放2.0 StackTrace:

  • 为了避免在构建Java源代码时出现有关特殊字符的警告,我在中添加了这一行,在升级到Gradle2.0之前,这一行工作良好: 我该怎么解决呢?

  • 我有一个相当大的Android应用程序项目,它引用了几个库项目。在我将eclipse ADT插件升级到最新版本(v22)之前,一切都很好。当然我也升级了SDK。我在eclipse中没有看到任何编译错误,但是当我在电话上运行项目时,我得到一个NoClassDefoundError。 arca库包含在一个引用库项目中(在libs文件夹中),我可以在package explorer中的“Android

  • 问题内容: 为了避免在构建Java源代码时出现有关特殊字符的警告,我将这一行放在我的行中,在升级到Gradle 2.0之前,该行运行良好: 升级后,失败并显示以下错误: 我该如何解决? 问题答案: 将行更改为 解决了这个问题。

  • 我正在从四年级升到六年级。这迫使我升级了很多东西,比如spring、h2、mySql连接器等。。 现在我有这个问题:在运行时,使用MySQL都很好。但是在测试中,我得到: 这是一个在升级之前运行良好的旧脚本。 版本: Spring靴:2.3.0 组织。flywaydb:flyway core:6.4.1(尽管在gradle我放了6.4.2) com。h2数据库:h2:1.4.200 mysql:m

  • 我使用一个向移动应用程序公开REST API的Web应用程序。我将Spring Boot版本从1.5.3.RELEASE升级到2.0.2.RELEASE,在修复了一些重大更改后,我面临着一个无法解决的问题。 我遵循了SpringBoot2.0迁移指南和SpringBootSecurity2.0,还研究了Springboot2.0M4中的安全性变化。 问题是应用使用 JWT 身份验证,并且有一个终结