@SpringBootTest和@Transactional导致测试冻结
当结合@SpringBootTest和@Transactional导致测试冻结,spring,spring-boot,spring-data-jpa,spring-test,spring-boot-test,Spring,Spring Boot,Spring Data Jpa,Spring Test,Spring Boot Test,当结合@SpringBootTest和@Transactional时,我的测试会冻结,并且永远不会恢复 我已经建立了一个问题的演示 由于由导致的唯一约束冲突而失败。为了解决这个问题,我通常会在每次测试后自动回滚我的更改。但是,这会导致测试冻结且永远无法恢复 知道为什么这两个注释不能很好地结合在一起吗?或者,您可以使用@SqlGroup来初始化数据库,而不是ResourceDatabasePopulator @RunWith(SpringRunner.class) @SpringBootTest(
@SpringBootTest
和@Transactional
时,我的测试会冻结,并且永远不会恢复
我已经建立了一个问题的演示
由于由导致的唯一约束冲突而失败。为了解决这个问题,我通常会在每次测试后自动回滚我的更改。但是,这会导致测试冻结且永远无法恢复
知道为什么这两个注释不能很好地结合在一起吗?或者,您可以使用
@SqlGroup
来初始化数据库,而不是ResourceDatabasePopulator
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@SqlGroup({
@Sql(executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD, scripts = "/testbed.sql"),
@Sql(executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD, scripts = "/clear.sql") })
public class UserControllerTest {
我对您的示例项目进行了更改,效果很好。
您可以在此处看到它们:因为您遇到了死锁。您正在启动完整的应用程序(是的,
@springbootest
就是这样做的),然后插入数据(但事务仍处于打开状态)。然后调用一个控制器,该控制器也尝试打开一个事务(请记住,我告诉过您启动整个应用程序),但由于另一个事务尚未结束,它无法从表中读取。僵局,有什么建议可以解决吗?我想使用一个嵌入式数据库对给定的数据集进行端到端的测试。