如何在Spek测试中使用依赖注入

时间:2017-02-06 09:11:38

标签: spring testing kotlin

我正在使用Kotlin,Spring和Spek实现简单的微服务。我想测试我的存储库,但我想知道如何将repo注入spek测试用例。每个示例或教程都基于创建新的引用,如下所示:

object SampleTest : Spek({
    describe("a calculator") {
        val calculator = SampleCalculator()

        it("should return the result of adding the first number to the second number") {
            val sum = calculator.sum(2, 4)
            assertEquals(6, sum)
        }

        it("should return the result of subtracting the second number from the first number") {
            val subtract = calculator.subtract(4, 2)
            assertEquals(2, subtract)
        }
    }
})

总结一下,我不想这样做:

val calculator = SampleCalculator()

我想实现这个

@Autowired
val calculator: SampleCalculator

但我不能这样,因为我无法将服务自动装入本地变量..任何解决方案?我是kotlin和spek的新人。

2 个答案:

答案 0 :(得分:1)

看看GitHub上的spek-spring-extension项目,有一种方法可以从Spring上下文中注入bean:

Spek的Spring扩展

这是用Spek编写Spring集成测试的概念证明

限制

当前,仅支持注入bean。

@ContextConfiguration(classes = arrayOf(MyConfiguration::class))
object MySpec: Spek({
    val context = createContext(MySpec::class)
    val foo = context.inject<Foo>()
    // val foo: Foo by context.inject()

    it("blah blah blah") {
        foo.doSomething()
    }
})

问题

Spring的TestContext框架对与Spek不兼容的测试的结构进行了假设,这意味着我们不能使用TestContextManager(我们可以,但会非常hackhacking)。

答案 1 :(得分:0)

使用lateinit尝试:

@Autowired
lateinit var calculator: SampleCalculator