繁体   English   中英

是否可以在不使用 Spring 框架的情况下在每个 JUnit 测试用例之后回滚数据库?

[英]Is it possible to rollback the database after each JUnit test case without using Spring framework?

我正在尝试测试从数据库更新多个表的服务,并且我想在每个测试用例之后将数据库回滚到以前的状态。 我发现的所有解决方案都使用 Spring 框架中的 @Transactional 和 @Rollback,但由于我的应用程序不是 Spring Web 应用程序,我想使用 javax @Transactional,这对我不起作用。

除了 Spring 之外,javax 或其他任何东西都可以做到这一点吗?

回滚事务对于测试(集成测试)来说不是一个好主意,因为在提交之前可能无法验证约束。

你应该:

  1. 有一个仅用于集成测试的数据库(或嵌入式数据库或容器数据库或 RAM 数据库)
  2. 执行,例如在 类规则测试规则中,脚本 SQL 以使数据库处于已知状态
  3. 执行测试
  4. 如果测试修改了数据库,则运行修改表的截断(再次或在您的类或测试规则中),并在执行新测试之前,在第 2 点再次运行脚本
  5. 运行集成测试不像单元测试那么频繁

更好的想法是使用内存数据库:H2 https://www.h2database.com/ 推荐Java内存数据库

并非总是,也不是数据库中的所有内容都可以回滚到初始状态(例如序列)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM