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

Java 是否可以在每个JUnit测试用例之后回滚数据库而不使用Spring框架?,java,junit,transactions,rollback,Java,Junit,Transactions,Rollback,我正在尝试测试更新数据库中多个表的服务,并希望在每个测试用例之后将数据库回滚到以前的状态。我找到的所有解决方案都使用@Transactional和@RollbackfromSpringFramework,但由于我的应用程序不是SpringWeb应用程序,我想使用javax@Transactional,这对我来说并不适用 这在javax或Spring之外的任何其他情况下都是可能的吗?回滚事务对于测试(集成测试)来说不是一个好主意,因为在提交之前可能不会验证约束 你应该: 只有用于集成测试的数据库(

我正在尝试测试更新数据库中多个表的服务,并希望在每个测试用例之后将数据库回滚到以前的状态。我找到的所有解决方案都使用@Transactional和@RollbackfromSpringFramework,但由于我的应用程序不是SpringWeb应用程序,我想使用javax@Transactional,这对我来说并不适用


这在javax或Spring之外的任何其他情况下都是可能的吗?

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

你应该:

  • 只有用于集成测试的数据库(或嵌入式数据库、容器数据库或内存数据库)
  • 例如,在SQL脚本中执行SQL,以使数据库处于已知状态
  • 执行测试
  • 如果测试修改了db,那么运行一个已修改表的截断(再次或在您的类或测试规则中),在形成新测试之前,再次在第2点运行脚本
  • 不要像单元测试那样频繁地运行集成测试

  • 更好的方法是使用内存数据库: 氢


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

    您可以在
    @Before
    中以编程方式创建一个事务,然后在
    @Before
    @D.Lawrence中以
    @方式回滚它。您有一个示例如何做到这一点吗?您是否使用简单的jdbc来实现此目的?@D.Lawrence是的