有名なDBUnit

 

http://legacy.techscore.com/tech/Others/DBUnit/index.html

 

 

DBUnit <=> JUnit単体テストのためのデータベースアクセス用ヘルパーライブラリ

 

XMLにてテストデータを用意し、テスト直前に対象テーブルのデータを外部ファイル等に退避し、

テストデ−タを投入し、結果を比較する。

また、テスト対象データをIDataSetITable等のオブジェクトに抽出し、

そこでの検証も可能。

 

インスタンス変数とコンストラクタ:

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

 

 

 

ExcelExportしようとしたときに起こった問題:

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)が削除されていたためで、

POI3.2http://archive.apache.org/dist/poi/release/bin/poi-bin-3.2-FINAL-20081019.zip)に下げたところ動いた。

こちらからの情報を参考にさせていただきました:http://d.hatena.ne.jp/tmftake/20100126/1264511274