我有一个简单的JUnit“烟雾”测试,它检查Spring是否正确加载:
@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") {}
}
}我把所有三个测试都放在一个文件中:
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,并看到我有三个独立的失败测试?
发布于 2022-08-25 19:00:04
Kotest的SpringExtension是SpringTestExtension的一个实例,它是SpecExtension和TestCaseExtension。
应用程序上下文的初始化发生在扩展的intercept部分的SpecExtension函数中。当应用程序上下文的初始化失败时,规范从未被执行,因此,规范的单个测试从未被初始化过。这样做的效果是IntelliJ没有显示任何失败的测试--没有失败的测试,只有失败的规范。
我们可以通过只获取SpringExtension初始化逻辑的一部分并将其放入这样的测试来传递该行为:
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)
}
}
}当此测试类的应用程序上下文失败时,如下所示:

https://stackoverflow.com/questions/73459494
复制相似问题