Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
@SpringBootTest和@Transactional导致测试冻结_Spring_Spring Boot_Spring Data Jpa_Spring Test_Spring Boot Test - Fatal编程技术网

@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
就是这样做的),然后插入数据(但事务仍处于打开状态)。然后调用一个控制器,该控制器也尝试打开一个事务(请记住,我告诉过您启动整个应用程序),但由于另一个事务尚未结束,它无法从表中读取。僵局,有什么建议可以解决吗?我想使用一个嵌入式数据库对给定的数据集进行端到端的测试。