Intereting Posts

как правильно инициализировать общий ресурс в kotlintest 2.x (interceptSpec)

Я пытаюсь выполнить стандартную установку beforeAll / afterAll в модульных тестах, но у afterAll есть некоторые проблемы. Похоже, что функция interceptSpec – это то, что я хочу, и в документации явно упоминается, что это хорошо, например, для очистки ресурсов базы данных, но я не могу найти хороший пример. Код ниже:

 class MyTest : StringSpec() { lateinit var foo: String override fun interceptSpec(context: Spec, spec: () -> Unit) { foo = "foo" println("before spec - $foo") spec() println("after spec - $foo") } init { "some test" { println("inside test - $foo") } } } 

В результате получается следующий результат:

 before spec - foo kotlin.UninitializedPropertyAccessException: lateinit property foo has not been initialized ... stack trace omitted ... after spec - foo 

Solutions Collecting From Web of "как правильно инициализировать общий ресурс в kotlintest 2.x (interceptSpec)"

kotlintest 2.x создает новый экземпляр тестового примера для каждого теста. Вы можете либо отменить этот флаг очистки поведения:

 override val oneInstancePerTest = false 

Или явно добавьте свои перехватчики для тестирования:

 val withFoo: (TestCaseContext, () -> Unit) -> Unit = { context, spec -> foo = "foo" spec() } init { "some test" { println("inside test - $foo") }.config(interceptors = listOf(withFoo)) }