数据库单元测试-回滚事务

时间:2020-01-09 10:35:38  来源:igfitidea点击:

如果我们要测试使用数据库的组件,例如一个DAO类,我们可能需要测试该组件是否确实将数据插入数据库中,对其进行更新等。

在测试数据库组件是否正常工作时,通常必须向数据库中插入大量数据,因此这些组件需要处理一些数据。不幸的是,这也意味着我们必须在单元测试完成后清理所有这些数据,以免干扰设置数据的其他单元测试。

实现此目的的明智方法是通过在事务内部运行单元测试。所有数据都在同一事务中插入,读取等。单元测试完成后,我们可以回滚事务,所有插入的数据都将消失。

这是一个简单的模板,向我们显示如何执行此操作:

@Test
public void testIt() throws Exception {

  Connection connection = getConnection();
  connection.setAutoCommit(false);    //begin transaction

  MyDao      myDao      = new MyDaoImpl(connection);

  try{
    
    myDao.insertABC("1");
    myDao.insertABC("2");

    assertEquals("1", myDao.readABC("1"));
    assertEquals("2", myDao.readABC("2"));

  } finally {
    connection.rollback();
    connection.close();
  }  
}

持久性技术可能不允许我们直接访问数据库连接。但是,通常我们仍然可以控制基础事务,从而启动和回滚事务。