Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save saswata-dutta/5ff1f32a8be41029eac47326f5bca5d5 to your computer and use it in GitHub Desktop.
Save saswata-dutta/5ff1f32a8be41029eac47326f5bca5d5 to your computer and use it in GitHub Desktop.
Getting DBUnit to play nice with Hibernate hbm2ddl.auto database changes by extending DBTestCase
package com.ossAccounts.ac.server;
import java.io.FileInputStream;
import org.dbunit.DBTestCase;
import org.dbunit.IDatabaseTester;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.xml.FlatXmlDataSetBuilder;
import org.dbunit.ext.mssql.InsertIdentityOperation;
import org.dbunit.operation.DatabaseOperation;
import org.hibernate.Session;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public abstract class DBTestExt extends DBTestCase
{
public DBTestExt()
{
super();
ExecuteHibernateSessionForRebuild();
}
public DBTestExt(String name)
{
super(name);
ExecuteHibernateSessionForRebuild();
}
// It is possible for DBUnit to try to insert records prior to Hibernate undertaking its database steps.
// This code makes sure hibernate runs first
private static Boolean hasExecutedHibernateSessionForRebuild = false;
private static void ExecuteHibernateSessionForRebuild()
{
if (!hasExecutedHibernateSessionForRebuild)
{
hasExecutedHibernateSessionForRebuild = true;
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.close();
}
}
/**
* Logger for this class
*/
private static final Logger logger = LoggerFactory.getLogger(DBTestExt.class);
private Boolean deleteAllOnStartup = true;
@Override
protected void setUp() throws Exception
{
if (this.deleteAllOnStartup)
{
this.deleteAll();
}
super.setUp();
}
protected abstract IDataSet getDataSet() throws Exception;
// protected abstract IDataSet getDeleteDataSet() throws Exception;
protected void setDeleteAllOnStartup(Boolean deleteOnStartup)
{
this.deleteAllOnStartup = deleteOnStartup;
}
/**
* Runs DBUnit in DELETE_ALL mode prior to normal operation.
*/
protected void deleteAll() throws Exception
{
logger.info("deleteAll() - start");
final IDatabaseTester databaseTester = getDatabaseTester();
assertNotNull( "DatabaseTester is not set", databaseTester );
databaseTester.setTearDownOperation( new InsertIdentityOperation(DatabaseOperation.DELETE_ALL) );
databaseTester.setDataSet( getDeleteDataSet() );
databaseTester.setOperationListener(getOperationListener());
databaseTester.onTearDown();
}
private IDataSet getDeleteDataSet()
{
// TODO Auto-generated method stub
logger.info("getDeleteDataSet() - start");
IDataSet builderDetails = null;
try
{
FlatXmlDataSetBuilder builder = new FlatXmlDataSetBuilder();
builder.setColumnSensing(true);
builderDetails = builder.build(new FileInputStream("test/com/ossAccounts/ac/server/xml/dbUnit_Delete.xml"));
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return builderDetails;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment