共通のセットアップを共有するいくつかのテストケースがあります。それらはすべて同じように初期化できる2つのフィールドが必要です。だから私はlateinit var
フィールドにそれらを抽出し、テストケースのインターセプタでそれらを作成できると思った。
しかし、テストケースでアクセスしようとすると、初期化されていないため、常に例外がスローされます。
すべてのテストケースの前にフィールドを作成する方法はありますか? Kotlintestインターセプタとlateinit vars
class ElasticsearchFieldImplTest : WordSpec() {
// These 2 are needed for every test
lateinit var mockDocument: ElasticsearchDocument
lateinit var mockProperty: KProperty<*>
override fun interceptTestCase(context: TestCaseContext, test:() -> Unit) {
// Before Each
mockDocument = mock()
mockProperty = mock {
on {name} doReturn Gen.string().generate()
}
// Execute Test
test()
// After Each
}
init {
"ElasticsearchFields" should {
"behave like normal var properties" {
val target = ElasticsearchFieldImpl<Any>()
// Here the exception is thrown
target.getValue(mockDocument, mockProperty) shouldBe null
val testValue = Gen.string().generate()
target.setValue(mockDocument, mockProperty, testValue)
target.getValue(mockDocument, mockProperty) shouldBe testValue
}
}
}
}
私は、デバッガでそれをステップ実行し、私はそれはテストの前に実行されていること、およびプロパティが初期化されていることがわかりinterceptTestCase
メソッドにブレークポイントを設定します。それから私はテストに進み、そのプロパティはもはや初期化されません。