package common; import java.sql.Connection; import junit.framework.TestCase; import org.dbunit.database.DatabaseConnection; import org.dbunit.database.IDatabaseConnection; /** * @author n-sasaki */ public class DBUnitTestCase extends TestCase { /** * 実行クラス名(〜Test)を取得し, DbUnitTestDataManagerクラスのフィールドに設定する. * * @param name TestCaseクラスのコンストラクタに与える引数 * @see junit.framework.TestCase#TestCase(String name) */ public DBUnitTestCase(String name) { super(name); dataManager = new DBUnitTestDataManager(getClassName()); } /** * IDatabaseConnectionを生成し, DbUnitTestDataManagerのsetUp()を実行. * * @see junit.framework.TestCase#setUp() */ public void setUp() throws Exception { super.setUp(); conn = dataManager.getConnection(); dataManager.setUp(conn); } /** * DbUnitTestDataManagerのtearDown()を実行し, IDatabaseConnectionを破棄. * * @see junit.framework.TestCase#tearDown() */ protected void tearDown() throws Exception { super.tearDown(); dataManager.tearDown(conn); conn = null; } /** * 実行クラス名を返却する. * 返却する文字列は実行クラス名の".class"を消去したもの. * * @return 実行クラス名 */ private String getClassName() { return getClass().getName().substring(getClass().getName().lastIndexOf(".") + 1); } /** * IDatabaseConnectionを取得する. * * @return org.dbunit.database.IDatabaseConnection * @throws Exception 予期しない例外が発生した場合 */ protected IDatabaseConnection getConnection() throws Exception { return dataManager.getConnection(); } /** * テーブル名を変更する. * * @param conn org.dbunit.database.IDatabaseConnection * @param tableName 変更前のテーブル名 * @param newTableName 変更後のテーブル名 * @throws Exception 予期しない例外が発生した場合 */ protected void renameTable(IDatabaseConnection conn, String tableName, String newTableName) throws Exception { try { dataManager.executeBatchStatement(conn, "RENAME " + tableName + " TO " + newTableName); } catch (Exception e) { throw new Exception("Rename Table Failed ..."); } } /** * テーブル名を変更する. * java.sql.Connection → conn org.dbunit.database.IDatabaseConnection. * * @param conn java.sql.Connection * @param tableName 変更前のテーブル名 * @param newTableName 変更後のテーブル名 * @throws Exception 予期しない例外が発生した場合 */ protected void renameTable(Connection conn, String tableName, String newTableName) throws Exception { renameTable(new DatabaseConnection(conn), tableName, newTableName); } /** * SQLを実行する. * * @param conn org.dbunit.database.IDatabaseConnection * @param sql 実行するSQL * @throws Exception 予期しない例外が発生した場合 */ public void executeStatement(IDatabaseConnection conn, String sql) throws Exception { dataManager.executeBatchStatement(conn, sql); } /** * 複数のSQLを実行する. * * @param conn org.dbunit.database.IDatabaseConnection * @param sqls 実行するSQL * @throws Exception 予期しない例外が発生した場合 */ public void executeStatement(IDatabaseConnection conn, String[] sqls) throws Exception { dataManager.executeBatchStatement(conn, sqls); } /** * SQLを実行する. * java.sql.Connection → conn org.dbunit.database.IDatabaseConnection. * * @param conn java.sql.Connection * @param sql 実行するSQL * @throws Exception 予期しない例外が発生した場合 */ public void executeStatement(Connection conn, String sql) throws Exception { dataManager.executeBatchStatement(new DatabaseConnection(conn), sql); } /** * 複数のSQLを実行する. * java.sql.Connection → conn org.dbunit.database.IDatabaseConnection. * * @param conn java.sql.Connection * @param sqls 実行するSQL * @throws Exception 予期しない例外が発生した場合 */ public void executeStatement(Connection conn, String[] sqls) throws Exception { dataManager.executeBatchStatement(new DatabaseConnection(conn), sqls); } /** org.dbunit.database.IDatabaseConnection */ protected IDatabaseConnection conn; private DBUnitTestDataManager dataManager; }