gpt4 book ai didi

Spring Boot @WebIntegrationTest 和 TestRestTemplate - 是否可以回滚测试事务?

转载 作者:行者123 更新时间:2023-12-04 04:59:01 32 4
gpt4 key购买 nike

我有一个带有 Spring Data Rest 的 Spring Boot 应用程序,我使用 @WebIntegrationTest随着TestRestTemplate在我的集成测试中。测试的基类如下所示:

@RunWith(SpringJUnit4ClassRunner.class)
@ActiveProfiles(profiles = "test")
@SpringApplicationConfiguration(classes = Application.class)
@Transactional
@TransactionConfiguration
@WebIntegrationTest("server.port: 0")
public abstract class IntegrationTest {

...

}

我正在使用 TestRestTemplate 测试实体的创建。执行 POST对资源的请求。问题是,即使我的测试配置为事务性,将实体持久化到数据库上的事务也不会回滚,因此测试后实体仍保留在数据库中。我有点理解,因为在测试中回滚的事务与持久化实体的事务不同。

现在我的问题是,是否有任何方法可以回滚由通过 RestTemplate 发出的请求触发的事务?在测试方法中?

最佳答案

is there any way of rolling back the transactions triggered by the requests made through the RestTemplate in a test method?



不可以。无法回滚由您部署的应用程序管理的事务。

当您使用 @WebIntegrationTest 注释测试类时和 @SpringApplicationConfiguration ,Spring Boot 将启动一个嵌入式 Servlet 容器并在其中部署您的应用程序。因此,从这个意义上说,您的测试和应用程序在两个不同的进程中运行。

Spring TestContext Framework 只管理 Test-managed transactions .因此, @Transactional 的存在在您的测试类上只影响本地测试管理的事务,而不影响不同进程中的事务。

正如其他人已经提到的,解决方法是在测试完成后重置数据库的状态。为此,您有多种选择。咨询 Executing SQL scripts有关详细信息,请参阅引用手册的部分。

问候,

Sam(Spring TestContext 框架的作者)

关于Spring Boot @WebIntegrationTest 和 TestRestTemplate - 是否可以回滚测试事务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29698291/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com