2

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

given("a test") {
    runBlocking { print("a") }

    it("block 1") {
        runBlocking { print("b") }
    }

    runBlocking { print("c") }

    it("block 2") {
        runBlocking { print("d") }
    }
}

我期望abcd被打印,但acbd实际上被打印了。

我应该如何编写这个测试,以便它可以按预期的顺序进行视觉读取和执行?

4

1 回答 1

3

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

作为解决您的问题的方法,您应该使用操作范围on而不是given

on("a test") {
    runBlocking { print("a") }

    it("block 1") {
        runBlocking { print("b") }
    }

    runBlocking { print("c") }

    it("block 2") {
        runBlocking { print("d") }
    }
}
于 2017-10-26T13:26:07.397 回答