package com.tddinaction.data.dbunit; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import org.dbunit.DatabaseTestCase; import org.dbunit.database.DatabaseConnection; import org.dbunit.database.IDatabaseConnection; import org.dbunit.dataset.IDataSet; import org.dbunit.dataset.xml.FlatXmlDataSet; import org.junit.Before; import com.tddinaction.data.util.SqlExecutor; public abstract class InMemoryDatabaseTestCase extends DatabaseTestCase { @Before public void setUp() throws Exception { createSchema(); super.setUp(); } private void createSchema() throws Exception { String resource = "/database-schema.sql"; InputStream schema = getClass().getResourceAsStream(resource); assertNotNull("Resource \"" + resource + "\" not found", schema); new SqlExecutor(getJdbcConnection()).execute(schema); } protected Connection getJdbcConnection() throws SQLException { try { Class.forName("org.hsqldb.jdbcDriver"); } catch (Exception e) { throw new RuntimeException(e); } return DriverManager.getConnection("jdbc:hsqldb:mem:testdb"); } @Override protected IDatabaseConnection getConnection() throws Exception { return new DatabaseConnection(getJdbcConnection()); } @Override protected IDataSet getDataSet() throws Exception { return getDataSet("initial"); } protected IDataSet getDataSet(String name) throws Exception { String resource = getClass().getSimpleName() + "." + name + ".xml"; InputStream stream = getClass().getResourceAsStream(resource); assertNotNull("Resource " + resource + " not found.", stream); return new FlatXmlDataSet(stream); } }