2

如何将以下内容注入测试,因为不允许构造函数参数并且无法初始化注入的 bean

@MicronautTest
class ApplicationTest:StringSpec() {

    @Inject
    lateinit val embeddedServer:EmbeddedServer;

    @Inject
    lateinit val dataSource:DataSource

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

3 回答 3

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)
}
于 2019-06-26T08:11:03.183 回答
1

因为测试用例像 lambda 一样传递给父类构造函数,所以必须使用构造函数注入

@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

于 2019-06-26T04:12:48.277 回答
0

您是否尝试过这样编写代码?

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

这应该有效。

于 2019-06-25T13:31:30.863 回答