首页 > 解决方案 > 使用 TransactionalOperator 进行单元测试超时(Kotlin 协程)

问题描述

我有一个如下的事务范围(Spring docs),我让它工作:

class PersonRepository(private val operator: TransactionalOperator) {

    suspend fun initDatabase() = operator.executeAndAwait {
        insertPerson1()
        insertPerson2()
    }
 }

但是当我尝试像这样在我的测试中模拟 TransactionalOperator 时:

val transactionalOperator = mockk<TransactionalOperator>(relaxed = true)

每次我的测试需要使用运算符的方法时,我都会超时。我也没有找到关于它的文档。

有人有在反应式事务管理的编程变体上使用测试和模拟的示例吗?

谢谢!

标签: springkotlin

解决方案


希望它有所帮助,我使用了以下构造:

val reactiveTransactionManager = mockk<ReactiveTransactionManager>()
val transactionalOperator = TransactionalOperator.create(reactiveTransactionManager)

every { reactiveTransactionManager.getReactiveTransaction(any()) } answers { mono { mockk() } }
every { reactiveTransactionManager.commit(any()) } answers { mono { mockk() } }
every { reactiveTransactionManager.rollback(any()) } answers { mono { mockk() } }

推荐阅读