private void setupOrTeardown( DbUnitTestContext testContext, boolean isSetup, Collection<AnnotationAttributes> annotations) throws Exception { IDatabaseConnection connection = testContext.getConnection(); DatabaseOperation lastOperation = null; for (AnnotationAttributes annotation : annotations) { for (String dataSetLocation : annotation.getValue()) { DatabaseOperation operation = annotation.getType(); org.dbunit.operation.DatabaseOperation dbUnitDatabaseOperation = getDbUnitDatabaseOperation(testContext, operation, lastOperation); IDataSet dataSet = loadDataset(testContext, dataSetLocation); if (dataSet != null) { if (logger.isDebugEnabled()) { logger.debug( "Executing " + (isSetup ? "Setup" : "Teardown") + " of @DatabaseTest using " + operation + " on " + dataSetLocation); } dbUnitDatabaseOperation.execute(connection, dataSet); lastOperation = operation; } } } }
/** * Called after a test method is executed to perform any database teardown and to check expected * results. * * @param testContext The test context * @throws Exception */ public void afterTestMethod(DbUnitTestContext testContext) throws Exception { try { verifyExpected(testContext, getAnnotations(testContext, ExpectedDatabase.class)); Collection<DatabaseTearDown> annotations = getAnnotations(testContext, DatabaseTearDown.class); try { setupOrTeardown(testContext, false, AnnotationAttributes.get(annotations)); } catch (RuntimeException e) { if (testContext.getTestException() == null) { throw e; } if (logger.isWarnEnabled()) { logger.warn("Unable to throw database cleanup exception due to existing test error", e); } } } finally { testContext.getConnection().close(); } }
private void verifyExpected( DbUnitTestContext testContext, Collection<ExpectedDatabase> annotations) throws Exception { if (testContext.getTestException() != null) { if (logger.isDebugEnabled()) { logger.debug( "Skipping @DatabaseTest expectation due to test exception " + testContext.getTestException().getClass()); } return; } IDatabaseConnection connection = testContext.getConnection(); IDataSet actualDataSet = connection.createDataSet(); for (ExpectedDatabase annotation : annotations) { IDataSet expectedDataSet = loadDataset(testContext, annotation.value()); if (expectedDataSet != null) { if (logger.isDebugEnabled()) { logger.debug("Veriftying @DatabaseTest expectation using " + annotation.value()); } DatabaseAssertion assertion = annotation.assertionMode().getDatabaseAssertion(); assertion.assertEquals(expectedDataSet, actualDataSet); } } }