kotlintest如何测试spring启动应用
How does kotlintest test spring boot application
Spring 引导应用程序的集成测试始终首先启动 Web 服务器。
最简单的 spring 启动测试如下所示,如何使用 kotlintest 迁移它?
@ExtendWith(SpringExtension::class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class ReportApplicationTests {
@Test
fun `Server can be launched`() {
}
}
我是这样设置的:首先,确保引用 JUnit 5 而不是 4,例如我在 build.gradle
:
的 dependencies
部分找到了这个
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()
}
然后在你的集成测试中 class 有这个(注意 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 测试 testing styles,例如FunSpec
、ShouldSpec
等
更新:从 4.3+ 版本开始,有一些变化。
版本 4.3+(更新)
KotlinTest 已重命名为 Kotest。 SpringExtension
是与 spring 集成的 class。 The documentation使用方法很简单。
除了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 very nice guide 关于如何设置 Spring 扩展以测试 Spring 框架。
基本上,除了 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
和 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
全局配置它。 KotlinTest Documentation
中解释了 ProjectConfig
Spring 引导应用程序的集成测试始终首先启动 Web 服务器。
最简单的 spring 启动测试如下所示,如何使用 kotlintest 迁移它?
@ExtendWith(SpringExtension::class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class ReportApplicationTests {
@Test
fun `Server can be launched`() {
}
}
我是这样设置的:首先,确保引用 JUnit 5 而不是 4,例如我在 build.gradle
:
dependencies
部分找到了这个
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()
}
然后在你的集成测试中 class 有这个(注意 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 测试 testing styles,例如FunSpec
、ShouldSpec
等
更新:从 4.3+ 版本开始,有一些变化。
版本 4.3+(更新)
KotlinTest 已重命名为 Kotest。 SpringExtension
是与 spring 集成的 class。 The documentation使用方法很简单。
除了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 very nice guide 关于如何设置 Spring 扩展以测试 Spring 框架。
基本上,除了 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
和 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
全局配置它。 KotlinTest Documentation