Как изменить свойства тестового объекта в KotlinTest через interceptTestCase
Я пытаюсь использовать метод interceptTestCase для настройки свойств для тестового примера в KotlinTest, как показано ниже:
class MyTest : ShouldSpec() {
private val items = mutableListOf<String>()
private var thing = 123
override fun interceptTestCase(context: TestCaseContext, test: () -> Unit) {
items.add("foo")
thing = 456
println("Before test ${items.size} and ${thing}")
test()
println("After test ${items.size} and ${thing}")
}
init {
should("not work like this") {
println("During test ${items.size} and ${thing}")
}
}
}
Вывод, который я получаю:
До теста 1 и 456
Во время теста 0 и 123
После теста 1 и 456
Поэтому сделанные мной изменения не видны в тестовом примере. Как мне изменить свойство перед каждым выполнением теста?
1 ответ
Решение
Вы должны получить доступ к текущей спецификации через TestCaseContext
, каждый тест имеет свои отдельные Spec
, например:
override fun interceptTestCase(context: TestCaseContext, test: () -> Unit) {
// v--- casting down to the special Spec here.
with(context.spec as MyTest) {
//^--- using with function to take the `receiver` in lambda body
items.add("foo") // --
// |<--- update the context.spec properties
thing = 456 // --
println("Before test ${items.size} and ${thing}")
test()
println("After test ${items.size} and ${thing}")
}
}