Testing 我应该如何在Spek中设置可变测试夹具?

Testing 我应该如何在Spek中设置可变测试夹具?,testing,kotlin,fixtures,Testing,Kotlin,Fixtures,我正试图了解斯佩克的固定装置。很容易理解,但我不确定在某些装置有状态时如何构建安装/拆卸。例如,如果我正在测试一个列表: describe("a list") { val list = arrayListOf<Int>() // Only instantiated once on("adding an item") { list.add(123) it("has a size of one") { list.

我正试图了解斯佩克的固定装置。很容易理解,但我不确定在某些装置有状态时如何构建安装/拆卸。例如,如果我正在测试一个列表:

describe("a list") {
    val list = arrayListOf<Int>() // Only instantiated once

    on("adding an item") {
        list.add(123)

        it("has a size of one") {
            list.size.should.equal(1)
        }
    }

    on("adding 2 items") {
        list.add(1)
        list.add(2)

        it("has a size of 2") {
            list.size.should.equal(2) // Fails, 3 != 2
        }
    }
}
我可以通过使变量为null来解决这个问题,但是我必须到处使用nullsafe运算符,这很糟糕,因为我知道它永远不会为null:

describe("a list") {
    var list : MutableList<Int>? = null

    beforeEachTest {
        list = arrayListOf()
    }

    on("adding an item") {
        list?.add(123) // Bleh
描述(“列表”){
变量列表:可变列表?=null
考试前{
list=arrayListOf()
}
关于(“添加项目”){
列表?.add(123)//Bleh
这也行得通,但意味着现在需要在两个地方复制每一位设置代码

describe("a list") {
    var list = arrayListOf<Int>()

    beforeEachTest {
        list = arrayListOf() // Bleh
    }

    on("adding an item") {
        list.add(123)
描述(“列表”){
var list=arrayListOf()
考试前{
list=arrayListOf()//Bleh
}
关于(“添加项目”){
列表.添加(123)

请原谅,如果这是显而易见的,但我来自JUnit世界,在那里,每一个测试之前,所有的东西(条形静力学)都会被拆除和重建,所以这一切看起来都很陌生!

如果你使用Kotlin
1.1
和Spek
1.1.0
你可以使用
Memorized

describe("a list") {
    val list by memoized { arrayListOf<Int>() }

    on("adding an item") {
        list.add(123)

        it("has a size of one") {
            list.size.should.equal(1)
        }
    }

    on("adding 2 items") {
        list.add(1)
        list.add(2)

        it("has a size of 2") {
            list.size.should.equal(2)
        }
    }
}
describe("a list") {
    val list by memoized { arrayListOf<Int>() }

    on("adding an item") {
        list.add(123)

        it("has a size of one") {
            list.size.should.equal(1)
        }
    }

    on("adding 2 items") {
        list.add(1)
        list.add(2)

        it("has a size of 2") {
            list.size.should.equal(2)
        }
    }
}
describe("a list") {
    val list = memoized { arrayListOf<Int>() }

    on("adding an item") {
        list().add(123)

        it("has a size of one") {
            list().size.should.equal(1)
        }
    }

    on("adding 2 items") {
        list().add(1)
        list().add(2)

        it("has a size of 2") {
            list().size.should.equal(2)
        }
    }
}