Как котлинтест тестирует весеннюю загрузку приложения - PullRequest
0 голосов
/ 13 ноября 2018

Интеграционный тест загрузочного приложения Spring всегда сначала запускает веб-сервер.

Самый простой тест весенней загрузки выглядит следующим образом: как его перенести, используя вместо этого kotlintest?

@ExtendWith(SpringExtension::class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class ReportApplicationTests {

    @Test
    fun `Server can be launched`() {
    }

}

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

Kotlintest имеет очень хорошее руководство о том, как настроить Spring Extension для тестирования Spring Framework.

По сути, помимо зависимости KotlinTest вы также добавляете Spring Extension:

testImplementation ("io.kotlintest:kotlintest-runner-junit5:3.3.2") // KT dependency
testImplementation("io.kotlintest:kotlintest-extensions-spring:3.3.2") // KT Spring Extensions

И затем вы включаете SpringListener и SpringBootTest в свой код:

import org.springframework.boot.test.context.SpringBootTest
import io.kotlintest.spring.SpringListener

@SpringBootTest
class SpringExample : FreeSpec() {

    override fun listeners() = listOf(SpringListener)

    init {
        "Verify context loads" {

        }
    }
}

Вам не нужно добавлять SpringListener к каждому тесту, который вы создаете, вы можете настроить его глобально, используя ProjectConfig. ProjectConfig описан в Документация KotlinTest

0 голосов
/ 14 ноября 2018

Вот как я его настроил: во-первых, убедитесь, что вы ссылаетесь на JUnit 5 вместо 4, например, у меня это есть в разделе dependencies моего build.gradle:

testImplementation "org.springframework.boot:spring-boot-starter-test:${springBootVersion}"
testImplementation "org.jetbrains.kotlin:kotlin-test"
testImplementation "org.jetbrains.kotlin:kotlin-test-junit"
testImplementation "io.kotlintest:kotlintest-extensions-spring:3.1.10"
testImplementation 'io.kotlintest:kotlintest-runner-junit5:3.1.10'
testImplementation "org.junit.jupiter:junit-jupiter-api:5.3.1"
testImplementation "org.junit.jupiter:junit-jupiter-engine:5.3.1"

Также добавьте это к build.gradle:

test {
    useJUnitPlatform()
}

Тогда в вашем классе интеграционного теста есть это (обратите внимание на переопределение listeners, без которого оно не будет работать):

import org.springframework.boot.test.context.SpringBootTest
import io.kotlintest.spring.SpringListener

@SpringBootTest(
        webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
        classes = [MyApplication::class])
class MyTestStringSpec : StringSpec() {
    override fun listeners() = listOf(SpringListener)

    init {
        // Tests go in here
    }
}

Очевидно, вы можете заменить StringSpec любым другим тестом Котлина стилями тестирования , например FunSpec, ShouldSpec и т. Д.

...