Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: Swanand KeskarОтветов: 3

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

@MicronautTest
class ApplicationTest:StringSpec() {

    @Inject
    lateinit val embeddedServer:EmbeddedServer;

    @Inject
    lateinit val dataSource:DataSource

    init{
        "test something"{
            //arrange act assert
        }
    }
}
  • Попробуйте var, если вы пишете свой код таким образом. Что вы имеете в виду, что конструктор без аргументов не работает? Xavier Bouclet 25.06.2019
  • Аннотации @Inject micronaut или весна? sksamuel 25.06.2019

kotlinmicronautkotlintest

Ответы

Ответ 1 · рейтинг 3 · Swanand Keskar

Вам необходимо указать конфигурацию проекта, создав объект, производный от 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)
}

Ответ 2 · рейтинг 1 · James Kleeh

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

@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

Ответ 3 · Xavier Bouclet

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

@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
        }
    }
}

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы