【发布时间】:2017-10-12 08:09:36
【问题描述】:
当组合 @SpringBootTest 和 @Transactional 时,我的测试冻结并且永远不会恢复。
我已经建立了问题的演示here。
getAgain 失败,因为 @Before 导致违反唯一约束。为了解决这个问题,我通常会包含一个@Transactional above the class,以便在每次测试后自动回滚我的更改。但是,这会导致测试冻结并且永远无法恢复。
知道为什么这两个注释不能很好地结合在一起吗?
【问题讨论】:
-
因为你遇到了死锁。您正在启动完整的应用程序(是的,这就是
@SpringBootTest所做的)然后您插入数据(但事务仍处于打开状态)。然后你调用一个控制器,它也试图打开一个事务(记住我告诉过你启动完整的应用程序)但是由于另一个事务没有结束它不能从表中读取。僵局。 -
关于如何解决这个问题的任何建议?我想针对给定的一组数据使用嵌入式数据库对我的应用程序进行端到端测试。
标签: spring spring-boot spring-data-jpa spring-test spring-boot-test