Как использовать MicronautTest с Kotlintest для внедрения beans во время тестирования? в Котлине

Как ввести следующее в Test, поскольку аргументы конструктора не разрешены и не удалось инициализировать внедренные beans

@MicronautTest
class ApplicationTest:StringSpec() {

    @Inject
    lateinit val embeddedServer:EmbeddedServer;

    @Inject
    lateinit val dataSource:DataSource

    init{
        "test something"{
            //arrange act assert
        }
    }
}

person Swanand Keskar    schedule 25.06.2019    source источник
comment
Попробуйте var, если вы пишете свой код таким образом. Что вы имеете в виду, что конструктор без аргументов не работает?   -  person Xavier Bouclet    schedule 25.06.2019
comment
Аннотации @Inject micronaut или весна?   -  person sksamuel    schedule 25.06.2019


Ответы (3)


Вам необходимо указать конфигурацию проекта, создав объект, производный от AbstractProjectConfig, назовите этот объект ProjectConfig и поместите его в пакет с именем io.kotlintest.provided. KotlinTest обнаружит его присутствие и будет использовать любую определенную в нем конфигурацию при выполнении тестов. согласно документации https://github.com/kotlintest/kotlintest/blob/master/doc/reference.md#project-config

object ProjectConfig :AbstractProjectConfig() {
override fun listeners() = listOf(MicornautKotlinTestExtension)
override fun extensions() = listOf(MicornautKotlinTestExtension)
}
person Swanand Keskar    schedule 26.06.2019

Поскольку тестовые примеры передаются конструктору родительского класса как лямбда, вы должны использовать внедрение конструктора.

@MicronautTest
class ApplicationTest(
    private val embeddedServer: EmbeddedServer,
    private val dataSource: DataSource
): StringSpec({

    "test something"{
        //arrange act assert
    }

})

Вы можете посмотреть любой из тестов в проекте в качестве работающего примера. https://github.com/micronaut-projects/micronaut-test/blob/master/test-kotlintest/src/test/kotlin

person James Kleeh    schedule 26.06.2019
comment
Это указано в документации, но я получаю java.lang.IllegalArgumentException: класс должен иметь единственный конструктор без аргументов - person Swanand Keskar; 26.06.2019

Вы пробовали писать такой код?

@MicronautTest
class ApplicationTest:StringSpec() {

    val embeddedServer:EmbeddedServer

    val dataSource:DataSource


    @Inject
    ApplicationTest(embeddedServer:EmbeddedServer, dataSource:DataSource) {
      this.embeddedServer = embeddedServer
       this.dataSource = dataSource
    }

    init{
        "test something"{
            //arrange act assert
        }
    }
}

Это должно сработать.

person Xavier Bouclet    schedule 25.06.2019