Spring启动应用程序的集成测试始终总是首先启动Web服务器。
spring boot测试的最简单测试如下所示,如何使用kotlintest迁移它?
@ExtendWith(SpringExtension::class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class ReportApplicationTests {
@Test
fun `Server can be launched`() {
}
}
答案 0 :(得分:2)
Kotlintest有very nice guide关于如何设置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
和 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
答案 1 :(得分:1)
这是我的设置方法:首先,请确保引用JUnit 5而不是4,例如我已经在dependencies
的{{1}}部分中找到了这一点:
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
}
}
替换为其他任何Kotlin测试testing styles,例如StringSpec
,FunSpec
等