首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何避免initializationError在SpringBootTest考试中的发生?

如何避免initializationError在SpringBootTest考试中的发生?
EN

Stack Overflow用户
提问于 2022-08-23 13:19:24
回答 1查看 172关注 0票数 1

我有一个简单的JUnit“烟雾”测试,它检查Spring是否正确加载:

代码语言:javascript
复制
@SpringBootTest
class ContextLoadJUnit {

    @Test
    fun contextLoads() {
        //empty by design
    }
}

我正试着把它改写成考特。我测试了两个版本:

代码语言:javascript
复制
@SpringBootTest
@ApplyExtension(SpringTestExtension::class)
class ContextLoadKotestWordSpec : WordSpec({
  "context" should { "load with WordSpec" {} }
})

@SpringBootTest
class ContextLoadKotestFunSpec : FunSpec() {

    override fun extensions(): List<Extension> {
        return listOf(SpringExtension)
    }
    init {
        test("context should load with FunSpec") {}
    }
}

我把所有三个测试都放在一个文件中:

代码语言:javascript
复制
import io.kotest.core.extensions.ApplyExtension
import io.kotest.core.extensions.Extension
import io.kotest.core.spec.style.FunSpec
import io.kotest.core.spec.style.WordSpec
import io.kotest.extensions.spring.SpringExtension
import io.kotest.extensions.spring.SpringTestExtension
import org.junit.jupiter.api.Test
import org.springframework.boot.test.context.SpringBootTest

@SpringBootTest
class ContextLoadJUnit {

    @Test
    fun contextLoads() {
        //empty by design
    }
}

@SpringBootTest
@ApplyExtension(SpringTestExtension::class)
class ContextLoadKotestWordSpec : WordSpec({
  "context" should { "load with WordSpec" {} }
})

@SpringBootTest
class ContextLoadKotestFunSpec : FunSpec() {

    override fun extensions(): List<Extension> {
        return listOf(SpringExtension)
    }
    init {
        test("context should load with FunSpec") {}
    }
}

当它们运行和传递时,它们被正确地处理:

但是当它们失败时,kotest被“包装”到initializationError中,看起来我只有两个测试:

是否有办法以不同的方式准备考考,避免使用initializationError,并看到我有三个独立的失败测试?

EN

回答 1

Stack Overflow用户

发布于 2022-08-25 19:00:04

Kotest的SpringExtensionSpringTestExtension的一个实例,它是SpecExtensionTestCaseExtension

应用程序上下文的初始化发生在扩展的intercept部分的SpecExtension函数中。当应用程序上下文的初始化失败时,规范从未被执行,因此,规范的单个测试从未被初始化过。这样做的效果是IntelliJ没有显示任何失败的测试--没有失败的测试,只有失败的规范。

我们可以通过只获取SpringExtension初始化逻辑的一部分并将其放入这样的测试来传递该行为:

代码语言:javascript
复制
import io.kotest.core.spec.style.FunSpec
import org.springframework.test.context.TestContextManager

class KotestWithSpring : FunSpec() {
    init {
        val testContextManager = TestContextManager(this::class.java)
        test("context should load") {
            testContextManager.beforeTestClass()
            testContextManager.prepareTestInstance(this)
        }
    }
}

当此测试类的应用程序上下文失败时,如下所示:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73459494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档