我无法让 Spring Boot 2.0.5 与 Kotlintest 3.1.10 很好地配合使用。
我做了一个测试项目来说明我遇到的问题。该项目是一个带有两个实体的Spring Boot 2应用程序,ShoppingOrder 和 OrderLine(完全没有想象力)。
还有一个测试用例ShoppingOrderSpec
,它只是通过存储和检索订单来测试映射。
测试用例配置如下:
@ExtendWith(SpringExtension::class)
@Transactional
@SpringBootTest
class ShoppingOrderSpec : WordSpec() {
override fun listeners() = listOf(SpringListener)
测试用例使用 Spring 的SpringExtension
连接到 JUnit 5 引擎。它还使用来自KotlintestSpringListener
的and来构建测试并进行断言。Wordspec
正确地SpringListener
自动装配依赖关系,但不知何故没有创建事务。
运行测试用例会给出以下堆栈跟踪:
2018-10-12 10:54:14.329 INFO 59374 --- [intest-engine-0] com.example.demo.ShoppingOrderSpec:在 4.478 秒内启动 ShoppingOrderSpec(JVM 运行 7.421)org.hibernate.LazyInitializationException:懒惰失败初始化角色集合:com.example.demo.ShoppingOrder.lines,无法初始化代理 - org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:582) 处没有会话 ...在 com.example。 demo.ShoppingOrderSpec$1$1.invoke(ShoppingOrderSpec.kt:35) at com.example.demo.ShoppingOrderSpec$1$1.invoke(ShoppingOrderSpec.kt:19)
所以,不知何故,org.springframework.transaction.annotation.Transactional
注释似乎不起作用,因为删除注释,只是给出了相同的响应。
任何人有任何想法如何得到@Transactional
应用和尊重?