如何在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 ,但实际上打印。

我应该如何编写这个测试,以便它以可视的方式读取并按照预定的顺序执行?

Spek基本上是用lambdas编写的,所以为了让Spek知道测试树就必须执行它 – 这就是所谓的发现阶段。 在这个阶段中,组范围(给定,描述,上下文)被执行,在你的情况下runBlocking {print(“a”)}runBlocking {print(“c”)}被调用。 一旦测试树已知,Spek现在可以进入执行阶段。 在这个阶段,Spek将执行传递给测试(it)和动作(on)范围的lambdas。

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

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