summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/EmployeePersistenceTest.java2
-rw-r--r--src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/JdbcTestCase.java101
2 files changed, 92 insertions, 11 deletions
diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/EmployeePersistenceTest.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/EmployeePersistenceTest.java
index d4f5646..71af3bd 100644
--- a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/EmployeePersistenceTest.java
+++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/EmployeePersistenceTest.java
@@ -19,7 +19,7 @@ public class EmployeePersistenceTest extends JdbcTestCase {
private EmployeeDAO employeePersistence;
public EmployeePersistenceTest() throws PersistenceException {
- employeePersistence = new EmployeeDatabaseDao(jdbcConnectionManager);
+ employeePersistence = new EmployeeDatabaseDao(getJdbcConnectionManager());
}
@Override
diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/JdbcTestCase.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/JdbcTestCase.java
index 5390841..dae93ff 100644
--- a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/JdbcTestCase.java
+++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/JdbcTestCase.java
@@ -1,30 +1,87 @@
package at.ac.tuwien.sepm.assignment.groupphase.util;
+import java.lang.invoke.MethodHandles;
+import java.sql.SQLException;
import java.sql.Types;
-import org.dbunit.DBTestCase;
-import org.dbunit.PropertiesBasedJdbcDatabaseTester;
+import org.dbunit.DefaultDatabaseTester;
+import org.dbunit.IDatabaseTester;
+import org.dbunit.IOperationListener;
import org.dbunit.database.DatabaseConfig;
+import org.dbunit.database.DatabaseConnection;
+import org.dbunit.database.IDatabaseConnection;
+import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.datatype.DataType;
import org.dbunit.dataset.datatype.DataTypeException;
import org.dbunit.ext.postgresql.PostgresqlDataTypeFactory;
+import org.dbunit.operation.DatabaseOperation;
+import org.junit.After;
+import org.junit.Before;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
-public abstract class JdbcTestCase extends DBTestCase {
+@Component
+public abstract class JdbcTestCase {
- private static final String JDBC_DRIVER = "org.h2.Driver";
+ private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
private static final String JDBC_URL =
"jdbc:h2:mem:test;INIT=RUNSCRIPT FROM 'classpath:sql/database.sql'";
- protected final JDBCConnectionManager jdbcConnectionManager;
+ private IDatabaseTester dbTester;
+ private IDatabaseConnection connection;
+ private IOperationListener operationListener;
+ private JDBCConnectionManager jdbcConnectionManager;
protected JdbcTestCase() {
- System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_DRIVER_CLASS, JDBC_DRIVER);
- System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_CONNECTION_URL, JDBC_URL);
-
jdbcConnectionManager = new JDBCConnectionManager(JDBC_URL);
}
- @Override
- protected void setUpDatabaseConfig(DatabaseConfig config) {
+ protected abstract IDataSet getDataSet() throws Exception;
+
+ protected JDBCConnectionManager getJdbcConnectionManager() {
+ return jdbcConnectionManager;
+ }
+
+ protected IDatabaseConnection getConnection() throws Exception {
+ if (connection == null)
+ connection = new DatabaseConnection(jdbcConnectionManager.getConnection(), null, true);
+
+ return connection;
+ }
+
+ private IOperationListener getOperationListener() {
+ if (operationListener == null) {
+ operationListener =
+ new IOperationListener() {
+ @Override
+ public void connectionRetrieved(IDatabaseConnection connection) {
+ setUpDatabaseConfig(connection.getConfig());
+ }
+
+ @Override
+ public void operationSetUpFinished(IDatabaseConnection connection) {
+ LOG.debug("operationSetUpFinished(connection={}) - start", connection);
+ }
+
+ @Override
+ public void operationTearDownFinished(IDatabaseConnection connection) {
+ LOG.debug(
+ "operationTearDownFinished(connection={}) - start", connection);
+ try {
+ connection.close();
+ } catch (SQLException e) {
+ LOG.error("Failed to close connection:" + e);
+ e.printStackTrace();
+ }
+ }
+ };
+ }
+
+ return operationListener;
+ }
+
+ // override DBUnit's enum handling
+ private void setUpDatabaseConfig(DatabaseConfig config) {
PostgresqlDataTypeFactory factory =
new PostgresqlDataTypeFactory() {
@Override
@@ -47,4 +104,28 @@ public abstract class JdbcTestCase extends DBTestCase {
config.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, factory);
}
+
+ @Before
+ public void setUp() throws Exception {
+ IDataSet dataSet = getDataSet();
+
+ dbTester = new DefaultDatabaseTester(getConnection());
+ getOperationListener().connectionRetrieved(getConnection());
+
+ dbTester.setSetUpOperation(DatabaseOperation.CLEAN_INSERT);
+ dbTester.setTearDownOperation(DatabaseOperation.NONE);
+ dbTester.setDataSet(dataSet);
+ dbTester.setOperationListener(getOperationListener());
+ dbTester.onSetup();
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ try {
+ dbTester.onTearDown();
+ getConnection().close();
+ } finally {
+ dbTester = null;
+ }
+ }
}