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();
        }
    }
 
}

QR Code
QR Code study:java:dbunit:testdata (generated for current page)