Skip to content

Introduce explicit Hibernate and/or DbUnit support in the TestContext Framework [SPR-3096] #7783

Closed
@spring-projects-issues

Description

@spring-projects-issues

nicolas de loof opened SPR-3096 and commented

I'm using this abstract base test class to test my Hibernate mappings and DAOs. It uses AbstractTransactionalDataSourceSpringContextTests to load the Hibernate SessionFactory and adds DbUnit integration to set up the database in an expected state before the test starts.

As I've found it really useful I'd like to contribute it.

public abstract class AbstractHibernateMappingsTests
    extends AbstractTransactionalDataSourceSpringContextTests {

    private HibernateTemplate hibernateTemplate;

    private String schema;

    protected final void onSetUpInTransaction() throws Exception {
        String resource = getDataSetResource();
        if ( resource != null ) {
            logger.info( "Loading DBUnit file " + resource );
            IDatabaseConnection connection = getDatabaseConnection();
            InputStream stream = getClass().getResourceAsStream( resource );
            IDataSet dataSet = new FlatXmlDataSet( stream );
            ReplacementDataSet replacementDataSet = new ReplacementDataSet( dataSet );
            replacementDataSet.addReplacementObject( "[NULL]", null );
            DatabaseOperation.REFRESH.execute( connection, replacementDataSet );
        }
    }

    protected IDatabaseConnection getDatabaseConnection() throws SQLException {
        Connection cnx = hibernateTemplate.getSessionFactory().getCurrentSession().connection();
        IDatabaseConnection connection = new DatabaseConnection( cnx, schema );
        return connection;
    }

    /** 
     * @return a resource name for a DBUnit flatDataset file (or null)
     */
    protected abstract String getDataSetResource();

    public void setHibernateTemplate( HibernateTemplate hibernateTemplate ) {
        this.hibernateTemplate = hibernateTemplate;
    }

   public void setSchema( String schema ) {
        this.schema = schema;
   }

    /**
     * @return the hibernateTemplate
     */
    protected HibernateTemplate getHibernateTemplate() {
        return hibernateTemplate;
    }
}

Affects: 2.0.2

Issue Links:

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions