Backup table data
あるテーブルに対して、transactionを行うクラスをテストする際、テーブルデータをバックアップする方法を紹介する。
ここで、紹介するテストクラスは、Integration with TestNGで紹介した親クラスを継承していることを前提する。
以下に、ソースの一部分を示す
public class TestSomeTableTransactionService extends AbstractCustomTestCase { //table backup file private File backupFile; /* (non-Javadoc) * @see parent.AbstractCustomTestCase#prepareSpecific() */ @Override protected void prepareSpecific() throws Exception { IDatabaseConnection _connection = null; try { _connection = databaseTester.getConnection(); //prepare backup file QueryDataSet _partialDataSet = new QueryDataSet(_connection); _partialDataSet.addTable("employee_mst"); backupFile = File.createTempFile("foo", "xml"); //write table data to file FlatXmlDataSet.write(_partialDataSet, new FileOutputStream(backupFile)); //prepare test data FlatXmlDataSetBuilder _builder = new FlatXmlDataSetBuilder(); InputStream _is = getClass().getResourceAsStream("testdata.xml"); FlatXmlDataSet _dataSet = _builder.build(_is); //clean insert DatabaseOperation.CLEAN_INSERT.execute(_connection, _dataSet); } finally { if (_connection != null) _connection.close(); } } }
ここで、テストデータとしてtestdata.xmlを使用しているが、サンプルは次節で紹介する。
Prepare test data
testdata.xmlを中身を下に示す。
<?xml version="1.0" encoding="UTF-8"?> <dataset> <employee_mst id="1" first_name="太郎" last_name="山田" birth="1980-04-01" dept_id="001" company="Ourparms corporations" reg_date="2020-05-20 15:36:25" reg_uid="test" mod_date="2020-05-20 15:36:25" mod_uid="test" delete_flag="0" /> </dataset>
Restore table data
テスト実施後、テーブルデータを元に復元するソースコードを以下に示す。
public class TestSomeTableTransactionService extends AbstractCustomTestCase { //table backup file private File backupFile; /* (non-Javadoc) * @see parent.AbstractCustomTestCase#tearDownHook() */ @Override protected void tearDownHook() throws Exception { IDatabaseConnection _connection = null; try { _connection = databaseTester.getConnection(); //restore backup file FlatXmlDataSetBuilder _builder = new FlatXmlDataSetBuilder(); IDataSet _dataSet = _builder.build(backupFile); DatabaseOperation.CLEAN_INSERT.execute(_connection, _dataSet); } finally { if (_connection != null) _connection.close(); } } }