4

Describe Spec スタイルを使用して、JUnit5 で実行されるKotlinTestテストを作成しようとしています。

一部のテストで同じ変数を初期化する必要がある場合、@BeforeEach は DescribeSpec 内では機能しません。

各テストの前にデータを初期化するにはどうすればよいですか?

class BlockchainUT : DescribeSpec({

    var blockchain = Blockchain()

    @BeforeEach
    fun beforeEach() {
        blockchain = Blockchain()
        blockchain.addBlock(listOf("foo1", "bar1"))
        blockchain.addBlock(listOf("foo2", "bar2"))
        blockchain.addBlock(listOf("foo3", "bar3"))
    }

    describe("isValidChain()") {

        context("when the chain does not start with the genesis block") {

            blockchain.chain[0] = Block(
                    System.currentTimeMillis(),
                    "---",
                    "xxx",
                    listOf("foo", "bar"))

            it("returns false") {
                Blockchain.isValid(blockchain) shouldBe false
            }
        }

        context("when the chain starts with the genesis block and has multiple blocks") {

            context("and a lastHash reference has changed returns false") {
                blockchain.chain[2] = Block(
                        blockchain.chain[2].timestamp,
                        "broken-lastHash",
                        blockchain.chain[2].hash,
                        blockchain.chain[2].data)
                it("returns false") {
                    Blockchain.isValid(blockchain) shouldBe false
                }
            }

            context("and the chain contains a block with an invalid field") {
                blockchain.chain[2] = Block(
                        blockchain.chain[2].timestamp,
                        blockchain.chain[2].lastHash,
                        blockchain.chain[2].hash,
                        listOf("some-bad-and-evil-data"))
                it("returns false") {
                    Blockchain.isValid(blockchain) shouldBe false
                }
            }
        }

    }
})
4

1 に答える 1