Java 失败的dbunit测试使事务保持打开状态
我已经设置了dbunit(2.4.9)来处理我的hibernate(4.2.19)代码。在插入过程中抛出异常之前,一切都正常。测试用例失败(正确),但db事务保持打开状态,我无法关闭它 下面是我的基本测试用例,它是从dbUnits DbTestCase扩展而来的。我猜我的tearDown方法没有被调用Java 失败的dbunit测试使事务保持打开状态,java,hibernate,transactions,dbunit,Java,Hibernate,Transactions,Dbunit,我已经设置了dbunit(2.4.9)来处理我的hibernate(4.2.19)代码。在插入过程中抛出异常之前,一切都正常。测试用例失败(正确),但db事务保持打开状态,我无法关闭它 下面是我的基本测试用例,它是从dbUnits DbTestCase扩展而来的。我猜我的tearDown方法没有被调用 public class DbTestCase extends DBTestCase { private static boolean doOnce = false; private Sess
public class DbTestCase extends DBTestCase
{
private static boolean doOnce = false;
private Session session;
public DbTestCase() throws Exception
{
super();
//This connection info is duplicated in dbu.hib.cfg.xml
System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_DRIVER_CLASS, "oracle.jdbc.driver.OracleDriver" );
System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_CONNECTION_URL, "jdbc:oracle:thin:@host:1521:SID" );
System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_USERNAME, "schema" );
System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_PASSWORD, "psswd" );
}
@Override
protected void setUp() throws Exception
{
super.setUp();
if(!doOnce)
{
doOnce = true;
BasicConfigurator.configure();
EbigHibernateFactory.setImplementation(new DbUnitHibUtils());
EbigHibernateFactory.initilize();
}
session = EbigHibernateFactory.getSession();
session.beginTransaction();
}
public void tearDown() throws Exception
{
session.getTransaction().commit();
if(session.isOpen())
{
session.close();
}
super.tearDown();
}
@Override
protected IDataSet getDataSet() throws Exception
{
return new FlatXmlDataSetBuilder().build(new FileInputStream("src/dbtest/dataset.xml"));
}
}
如果在tearDown()中放置断点并进行调试,您将确定是否调用了该断点。getDataSet()中的异常可能正在停止正常的JUnit生命周期。您是否尝试在tearDown方法中捕获异常,并使用catch/finally块关闭事务?