Я пытаюсь использовать метод 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
- Существует ли эквивалент Котлина для библиотеки AssertJ?
- Можно ли получить строку в выражении лямбда?
- В чем разница между shouldBe и shouldBe именно в KotlinTest?
- как правильно инициализировать общий ресурс в kotlintest 2.x (interceptSpec)
- Существует типовая структура проекта kotlintest
После испытаний 1 и 456
Итак, изменения, которые я сделал, не отображаются в тестовом примере. Как мне изменить свойство до каждого выполняемого теста?
вы должны получить доступ к текущей спецификации через 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}") } }