有名なDBUnit
http://legacy.techscore.com/tech/Others/DBUnit/index.html
DBUnit <=> JUnit単体テストのためのデータベースアクセス用ヘルパーライブラリ
XMLにてテストデータを用意し、テスト直前に対象テーブルのデータを外部ファイル等に退避し、
テストデ−タを投入し、結果を比較する。
また、テスト対象データをIDataSetやITable等のオブジェクトに抽出し、
そこでの検証も可能。
インスタンス変数とコンストラクタ:
public class AcceptOrderBeanExcelTest extends TestCase {
private File file;
private FileOutputStream out;
private FileInputStream in;
private IDatabaseConnection connection;
private IDatabaseTester databaseTester;
public AcceptOrderBeanExcelTest(String
name) throws Exception {
super(name);
databaseTester = new JdbcDatabaseTester("com.mysql.jdbc.Driver",
"jdbc:mysql://localhost/test", "****", "****");
connection = new MySqlConnection(databaseTester.getConnection().getConnection(), "test");
}
テーブルデータのバックアップ:
// 現状のバックアップを取得
QueryDataSet partialDataSet = new QueryDataSet(connection);
partialDataSet.addTable("accept_order");
System.out.println(System.getProperty("java.io.tmpdir"));
file = File.createTempFile("accept", ".xml");
System.out.println(file);
out = new FileOutputStream(file);
FlatXmlDataSet.write(partialDataSet,
out);
out.flush();
out.close();
テストデータ取り込み時に、単一のシートのみ取り込むコツ:
// テストデータを投入する
in = new FileInputStream("xls/accept_order_data.xls");
IDataSet dataSet = new XlsDataSet(in);
ITable table = dataSet.getTable("accept_order");
DefaultDataSet dds = new DefaultDataSet(table);
DatabaseOperation.CLEAN_INSERT.execute(connection, dds);
in.close();
テストデータ削除とバックアップデータ復帰:
// バックアップデータ復帰
in = new FileInputStream(file);
IDataSet dataSet = new FlatXmlDataSetBuilder().build(in);
DatabaseOperation.CLEAN_INSERT.execute(connection, dataSet);
in.close();
実際の比較:
// 実行結果を検証する
IDataSet databaseDataSet = connection.createDataSet();
ITable actualTable = databaseDataSet.getTable("accept_order");
// 期待されるデータを取得
FileInputStream ins2 = new FileInputStream(
"xls/accept_order_data.xls");
IDataSet expectedDataSet = new XlsDataSet(ins2);
ITable expectedTable = expectedDataSet.getTable("accept_order_store");
// 比較する
Assertion.assertEquals(expectedTable,
actualTable);
ins2.close();
ExcelにExportしようとしたときに起こった問題:
Exception in thread
"main" java.lang.NoSuchMethodError: org.apache.poi.hssf.usermodel.HSSFCell.setCellValue(Lorg/apache/poi/hssf/usermodel/HSSFRichTextString;)V
at org.dbunit.dataset.excel.XlsDataSetWriter.write(XlsDataSetWriter.java:101)
at org.dbunit.dataset.excel.XlsDataSet.write(XlsDataSet.java:93)
at com.aksys.dbunit.XlsDataSetSample.main(XlsDataSetSample.java:20)
が出て困った。使っていたPOIのバージョンが3.7であり、そのバージョンでsetCellValue(HSSFRichTextString)が削除されていたためで、
POIを3.2(http://archive.apache.org/dist/poi/release/bin/poi-bin-3.2-FINAL-20081019.zip)に下げたところ動いた。
こちらからの情報を参考にさせていただきました:http://d.hatena.ne.jp/tmftake/20100126/1264511274