-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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