Intereting Posts
Корда: Сторона отклонила запрос сеанса, поскольку Провайдер не был зарегистрирован База данных Singleton Room в SyncAdapter для запуска LiveData В чем разница между «const» и «val»? Android – Trigger MainActivity, чтобы сделать что-то из пользовательского вида Как поместить несколько ящиков рядом друг с другом в вертикально прокручиваемом виде в Android Studio? FragmentManager выбрасывает исключение IllegalArgumentException в Котлине Как создать неизменный список в Kotlin, который также является неизменным списком в Java? Фрагмент с ViewPager с пустыми страницами после возвращения к нему из другого фрагмента Есть ли способ открыть URL-адрес в окне Private Window / Ingognito с помощью Java? Java и Kotlin кастинг с дженериками. Потеря безопасности Как передать null в Observable с типом NULL в RxJava 2 и Kotlin Почему компилятор не находит константу android.R.id.home? Исключение Null Pointer, работающее с Map (Kotlin) Любой способ унаследовать один и тот же общий интерфейс дважды (с отдельными типами) в Котлин? Глобальная функция расширения в котлине

как правильно инициализировать общий ресурс в 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 

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)) }