我正在使用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的新人。
答案 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