1

Spring Boot 应用程序的集成测试总是首先启动 Web 服务器。

spring boot test 最简单的测试如下所示,如何改用 kotlintest 进行迁移?

@ExtendWith(SpringExtension::class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class ReportApplicationTests {

    @Test
    fun `Server can be launched`() {
    }

}
4

2 回答 2

6

更新:从 4.3+ 版本开始,有些东西发生了变化。

版本 4.3+(更新)

KotlinTest 更名为 Kotest。这SpringExtension是与spring集成的类。关于如何使用它的文档非常简单。

除了Kotest依赖之外,您还应该添加SpringExtension

testImplementation("io.kotest.extensions:kotest-extensions-spring:1.0.0")

然后包含SpringExtension到您的扩展中。从那时起,您可以Spring Boot在测试中使用所有必须提供的东西,例如ContextConfiguration

@SpringBootTest
class MyTestSpec : FunSpec() {
   override fun extensions() = listOf(SpringExtension)

   init {
     test("I'm inside a Spring context!") { }
   }
}

版本 3.3.2(非常旧)

Kotlintest 有一个关于如何设置 Spring Extension 来测试 Spring Framework的非常好的指南。

基本上,除了KotlinTest依赖之外,您还可以添加它Spring Extension

testImplementation ("io.kotlintest:kotlintest-runner-junit5:3.3.2") // KT dependency
testImplementation("io.kotlintest:kotlintest-extensions-spring:3.3.2") // KT Spring Extensions

然后将SpringListener and SpringBootTest包含到您的代码中:

import org.springframework.boot.test.context.SpringBootTest
import io.kotlintest.spring.SpringListener

@SpringBootTest
class SpringExample : FreeSpec() {

    override fun listeners() = listOf(SpringListener)

    init {
        "Verify context loads" {

        }
    }
}

您不需要添加SpringListener到您创建的每个测试中,您可以使用全局配置它ProjectConfig。ProjectConfig 在KotlinTest 文档中进行了解释

于 2018-12-26T03:49:27.270 回答
2

以下是我的设置方式:首先,确保引用 JUnit 5 而不是 4,例如,我在dependencies我的部分中有这个build.gradle

testImplementation "org.springframework.boot:spring-boot-starter-test:${springBootVersion}"
testImplementation "org.jetbrains.kotlin:kotlin-test"
testImplementation "org.jetbrains.kotlin:kotlin-test-junit"
testImplementation "io.kotlintest:kotlintest-extensions-spring:3.1.10"
testImplementation 'io.kotlintest:kotlintest-runner-junit5:3.1.10'
testImplementation "org.junit.jupiter:junit-jupiter-api:5.3.1"
testImplementation "org.junit.jupiter:junit-jupiter-engine:5.3.1"

也将其添加到build.gradle

test {
    useJUnitPlatform()
}

然后在您的集成测试类中有这个(注意覆盖listeners,没有它将不起作用):

import org.springframework.boot.test.context.SpringBootTest
import io.kotlintest.spring.SpringListener

@SpringBootTest(
        webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
        classes = [MyApplication::class])
class MyTestStringSpec : StringSpec() {
    override fun listeners() = listOf(SpringListener)

    init {
        // Tests go in here
    }
}

显然,您可以替换StringSpec为任何其他 Kotlin 测试测试样式,例如FunSpec,ShouldSpec等。

于 2018-11-14T08:41:12.453 回答