如何在Kotlin-Spek测试中组织多个协同程序和期望块



我写了一个失败的Spek测试,因为我对涉及多个协程和it函数的执行顺序做出了错误的假设:

given("a test") {
runBlocking { print("a") }
it("block 1") {
runBlocking { print("b") }
}
runBlocking { print("c") }
it("block 2") {
runBlocking { print("d") }
}
}

我原以为会打印abcd,但实际上打印了acbd

我应该如何编写这个测试,以便它既能直观地读取,又能按预期顺序执行?

Spek基本上是使用lambdas编写的,因此为了让Spek了解测试树,它必须执行它——这被称为发现阶段。在该阶段组作用域(给定、描述、上下文)被执行,在您的情况下,调用runBlocking{print("a")}runBlocking{print("c")}。一旦知道了测试树,Spek现在就可以进入执行阶段了。在这个阶段,Spek将执行传递给测试(it)和作用域(on)的lambda。

为了解决您的问题,您应该在上使用操作范围,而不是给定

on("a test") {
runBlocking { print("a") }
it("block 1") {
runBlocking { print("b") }
}
runBlocking { print("c") }
it("block 2") {
runBlocking { print("d") }
}
}

相关内容

  • 没有找到相关文章

最新更新