也许,我做错了什么,但我找不到以下情况的好方法。
我想对在下面使用Spring Batch执行作业的服务进行单元测试。这些作业通过预先配置AsyncTaskExecutor
在单独的线程中执行。在我的单元测试中,我想:
- 创建几个域对象并通过 DAO 持久化它们
- 调用服务方法来启动作业
- 等到作业完成
- 使用 DAO 检索域对象并检查它们的状态
显然,以上所有内容都应该在一个事务中执行,但不幸的是,事务不会传播到新线程(我理解这背后的基本原理)。
我想到的想法:
- 在步骤 (1) 之后提交事务#1。不好,因为 DB 状态应该在单元测试后回滚。
Isolation.READ_UNCOMMITTED
在作业配置中使用。但这需要两种不同的配置用于测试和生产。