Java 失败的dbunit测试使事务保持打开状态

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

我已经设置了dbunit(2.4.9)来处理我的hibernate(4.2.19)代码。在插入过程中抛出异常之前,一切都正常。测试用例失败(正确),但db事务保持打开状态,我无法关闭它

下面是我的基本测试用例,它是从dbUnits DbTestCase扩展而来的。我猜我的tearDown方法没有被调用

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块关闭事务?