Как я могу инициализировать переменную перед каждым тестом, используя kotlin-test framework
Я пытаюсь найти способ установить переменную перед каждым тестом. Точно так же, как метод @Before в Junit. Пройдя документ из kotlin-test, я обнаружил, что могу использовать интерфейс interceptTestCase(). Но, к сожалению, приведенный ниже код вызовет исключение:
kotlin.UninitializedPropertyAccessException: lateinit property text has not been initialized
class KotlinTest: StringSpec() {
lateinit var text:String
init {
"I hope variable is be initialized before each test" {
text shouldEqual "ABC"
}
"I hope variable is be initialized before each test 2" {
text shouldEqual "ABC"
}
}
override fun interceptTestCase(context: TestCaseContext, test: () -> Unit) {
println("interceptTestCase()")
this.text = "ABC"
test()
}
}
Я неправильно использую interceptTestCase()? Большое спасибо ~
2 ответа
Быстрое решение состоит в том, чтобы добавить нижеприведенный оператор в тестовый пример:override val oneInstancePerTest = false
Основная причина заключается в том, что oneInstancePerTest имеет значение true по умолчанию (хотя в тестовом документе kotlin это значение равно false), что означает, что каждый сценарий тестирования будет выполняться в разных экземплярах.
В рассматриваемом случае инициализация interceptTestCase
метод запущен в экземпляре A, установите текст в ABC. Затем тестовый пример выполнялся в экземпляре B без interceptTestCase
,
Для более подробной информации, есть открытый вопрос в GitHub:
https://github.com/kotlintest/kotlintest/issues/174
Вы не инициализировали text
переменная. init вызывается первым, когда вы создаете объект для класса.
Ты звонишь text shouldEqual "ABC"
в init
заблокировать в вашем коде, что время не будет никакого значения в text
переменная.
Ваша функция interceptTestCase(context: TestCaseContext, test: () -> Unit)
можно назвать только после init
блок.
Инициализируйте текст в самом конструкторе, как показано ниже, чтобы не было этой ошибки или какой-либо альтернативы.
class KotlinTest(private val text: String): StringSpec()