spring-boot - kotlintest如何测试spring boot应用

标签 spring-boot kotlin kotlintest

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

spring boot测试最简单的测试如下,如何改用kotlintest迁移呢?

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

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

}

最佳答案

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

版本 4.3+(更新)

KotlinTest 更名为 Kotest。 SpringExtension 是与 spring 集成的类。 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 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 对其进行全局配置。 ProjectConfig 在 KotlinTest Documentation 中进行了解释

关于spring-boot - kotlintest如何测试spring boot应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53277045/

相关文章:

Spring crud 存储库按不区分大小写的字符串排序

spring-boot - SpringBootTest不回滚

spring-boot - JBAS015852 : Could not index class module-info. 类 - Spring Boot + Jboss 7.1.1

android - MultiAutoCompleteTextView 在 AlertDialog 构建器中保持为空

java - 从 Java/Kotlin 中启动的进程中获取 InputStream

kotlin - kotest 描述子句中的嵌套规范

spring - 更改部署为 war 的 spring-boot 应用程序的默认欢迎页面

java - 为什么在 Assert.assertNotNull 中调用 void 函数是有效的?

kotlin - AssertJ 库是否有 Kotlin 等价物?