我有一个带有 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(使用前将#替换为@)