Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I initialize variable before each test using kotlin-test framework

I'm trying to find a way to set up variable before each test. Just like the @Before method in Junit. Go through the doc from kotlin-test, I found that I can use interceptTestCase() interface. But unfortunately, the code below will trigger exception:

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

Am I in the wrong way to use interceptTestCase()? Thank you very much~

like image 398
Lawrence Ching Avatar asked Oct 30 '22 03:10

Lawrence Ching


1 Answers

A quick solution is to add below statement in test case:
override val oneInstancePerTest = false

The root cause is that oneInstancePerTest is true by default(although it's false in kotlin test doc), which means every test scenario will run in the different instances.

In the case in question, The initializing interceptTestCase method ran in instance A, set text to ABC. Then the test case ran in instance B without interceptTestCase.

For more detail, there is an open issue in GitHub:
https://github.com/kotlintest/kotlintest/issues/174

like image 101
Lawrence Ching Avatar answered Nov 07 '22 21:11

Lawrence Ching