====== Backup table data ======
あるテーブルに対して、transactionを行うクラスをテストする際、テーブルデータをバックアップする方法を紹介する。\\
ここで、紹介するテストクラスは、[[study:java:powermock:integation|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を中身を下に示す。
====== 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();
}
}
}