我有一个简单的JUnit“smoke”测试,用于检查Spring上下文是否正确加载:
@SpringBootTest
class ContextLoadJUnit {
@Test
fun contextLoads() {
//empty by design
}
}
我试着把它重写成kotest。我已经测试了两个版本:
@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被“ Package ”到initializationError
中,看起来我只有两个测试:
有没有办法以不同的方式准备kotest,避免initializationError
,并看到我有三个单独的失败测试?
1条答案
按热度按时间bsxbgnwa1#
Kotest的
SpringExtension
是SpringTestExtension
的一个示例,它是一个SpecExtension
和一个TestCaseExtension
。应用程序上下文的初始化发生在扩展的
SpecExtension
部分的intercept
函数中。当应用程序上下文的初始化失败时,规范从未被执行,因此,规范的单个测试从未被初始化。这具有IntelliJ不显示任何失败的测试的效果--简单地说,没有失败的测试,只有失败的规范。我们可以通过只取
SpringExtension
的初始化逻辑的一部分并将其放在如下测试中来绕过该行为:当此测试类的应用程序上下文失败时,它将如下所示: