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

2023-11-25

我有一个带有 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在测试方法中?


有什么办法可以回滚由 通过提出的请求RestTemplate在测试方法中?

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

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

The Spring TestContext 框架只管理测试管理交易。因此,存在@Transactional在您的测试类上仅影响本地测试管理的事务,而不影响其他进程中的事务。

正如其他人已经提到的,解决方法是在测试完成后重置数据库的状态。为此,您有多种选择。咨询执行 SQL 脚本参考手册部分了解详细信息。

Regards,

Sam (Spring TestContext 框架的作者)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Boot @WebIntegrationTest 和 TestRestTemplate - 是否可以回滚测试事务? 的相关文章

随机推荐