我试图对使用Spring的@Async注释的方法进行单元(集成)测试。 测试在内存中的h2数据库中设置一些数据,然后运行异步方法。异步代码看不到测试数据:O 删除@Async可以解决问题。
有任何帮助吗? :)
答案 0 :(得分:0)
事务不像@Async之前那样传播。
@Async and @Transactional: not working
您的测试可以提交数据并在测试的任一侧删除它,删除Spring在测试@Transactionals中的自动回滚。
你可以创建一个异步方法调用的默认访问方法,你的测试也可以直接调用,尽管你不再测试异步行为。
可能有更好的春季实施支持您所需要的,使交易可用,但我没有。
答案 1 :(得分:0)
我有同样的错误。解决方案对我来说很简单:我没有在我的 data_init-h2.sql
的末尾放置COMMIT;
我想您也没有放这个。如果您考虑一下,这是很合逻辑的。您的主线程启动了一个事务,但实际上并未将其提交到h2。 Spring启动另一个线程,并在单独的事务中在其中运行@Async
方法。
由于缺少提交,因此您看不到该另一个线程上的数据更改。在主线程上,您甚至可以像在该事务中一样在提交之前看到数据更改。