Menu

FrontPage

Eclipseプラグイン
Eclipse小技集
リファクタリング講座
テスティングフレームワーク JUnit
MSDEについて



The 20 newest affair
2010-09-092010-09-082010-09-072010-09-062010-09-012010-08-312010-08-272010-08-242010-08-232010-08-172010-08-162010-07-302010-07-212010-07-132010-06-272010-06-182010-06-172010-06-16
*スクリーンショット張替え中です
 しばらくお待ちください。。


dbUnit使用方法 ~ XLS DataSet編


必要ファイル


XLSファイルを扱うため、Jakarta POIが必要です。

poi-bin-2.0-RC2-20040102.zip
本家:http://jakarta.apache.org/poi/

上記ファイルを解凍し、中にある「poi-2.0-RC2-20040102.jar」に対して、プロジェクトのプロパティからパスを通します。

[706F69312E6A7067.jpg]


DataExportWithXLS.java


データベースからデータを取得しXLS形式で書き出すプログラムです。
DataExportWithXLS.java
01 package common;
02
03 import java.io.File;
04 import java.io.FileOutputStream;
05 import java.io.FileWriter;
06 import java.sql.Connection;
07 import java.sql.DriverManager;
08
09 import org.dbunit.database.DatabaseConnection;
10 import org.dbunit.database.IDatabaseConnection;
11 import org.dbunit.dataset.IDataSet;
12 import org.dbunit.dataset.csv.CsvDataSetWriter;
13 import org.dbunit.dataset.excel.XlsDataSet;
14 import org.dbunit.dataset.xml.FlatDtdDataSet;
15 import org.dbunit.dataset.xml.FlatXmlDataSet;
16
17 /**
18 * @author n-sasaki
19 */
20 public class DataExportWithXLS {
21
22 private static final String TEST_DATA_DIRECTORY = "D:/wiki/";
23 private static final String DATA_FILE_NAME = "dbUnitTest.xls";
24
25 private static final String DRIVER_CLASS_NAME = "oracle.jdbc.driver.OracleDriver";
26 private static final String DATABASE_URL = "jdbc:oracle:thin:@localhost:1521:DJWiki";
27 private static final String DATABASE_USER_NAME = "djwiki";
28 private static final String DATABASE_PASSWORD = "djwiki";
29 private static final String DATABASE_SCHEMA = "DJWIKI";
30
31 public static void main(String[] args) throws Exception {
32
33 // database connection
34 Class.forName(DRIVER_CLASS_NAME);
35
36 Connection jdbcConnection =
37 DriverManager.getConnection(DATABASE_URL, DATABASE_USER_NAME, DATABASE_PASSWORD);
38
39 IDatabaseConnection connection = new DatabaseConnection(jdbcConnection, DATABASE_SCHEMA);
40
41 System.out.println("Schema : " + connection.getSchema());
42
43 // partial database export
44 String[] tableNames =
45 {
46 "USER_TABLE",
47 "WIKI_USER"
48 };
49
50 System.out.println("対象テーブル");
51 for (int idx = 0; idx < tableNames.length; idx++) {
52 System.out.println(tableNames[idx]);
53 }
54
55 IDataSet partialDataSet = connection.createDataSet(tableNames);
56
57 System.out.println("<< XLSデータExport開始 >>");
58
59 XlsDataSet.write(partialDataSet, new FileOutputStream(new File(TEST_DATA_DIRECTORY + DATA_FILE_NAME)));
60
61 System.out.println("<< XLSデータExport終了 >>");
62 }
63 }

●設定が必要な箇所
  • 22:ここで設定されたパスにファイルが生成されます。
  • 23:出力されるXLSファイル名(原則としてテストケースと同じ名前にします。)
  • 25:データベースドライバのクラス名
  • 26:データベースのURL
  • 27:データベースのユーザ名
  • 28:データベースのパスワード
  • 29:データベースのスキーマ名(ユーザ名を大文字にしたもの)
   但し、PostgreSQLはスキーマという概念が存在しないので空にする。
  • 46:出力したいテーブルの名前(Stringの配列)


以上の設定が完了したら実行します。
22行目で設定したパスにXLSファイルが出来ています。



複数テーブルを指定した場合は、1シートに1テーブルのデータが書き込まれます。


DataInportWithXLS.java


XLSファイルのデータをデータベースにインポートするプログラムです。
DataImportWithXLS.java
01 package common;
02
03 import java.io.File;
04 import java.io.FileInputStream;
05 import java.io.FileNotFoundException;
06 import java.io.FileReader;
07 import java.sql.Connection;
08 import java.sql.DriverManager;
09
10 import org.dbunit.database.DatabaseConnection;
11 import org.dbunit.database.IDatabaseConnection;
12 import org.dbunit.dataset.IDataSet;
13 import org.dbunit.dataset.excel.XlsDataSet;
14 import org.dbunit.dataset.xml.FlatDtdDataSet;
15 import org.dbunit.dataset.xml.FlatXmlDataSet;
16 import org.dbunit.operation.DatabaseOperation;
17
18 /**
19 * @author n-sasaki
20 */
21 public class DataImportWithXLS {
22
23 private static final String TEST_DATA_DIRECTORY = "D:/wiki/";
24 private static final String DATA_FILE_NAME = "dbUnitTest.XLS";
25
26 private static final String DRIVER_CLASS_NAME = "oracle.jdbc.driver.OracleDriver";
27 private static final String DATABASE_URL = "jdbc:oracle:thin:@localhost:1521:DJWiki";
28 private static final String DATABASE_USER_NAME = "djwiki";
29 private static final String DATABASE_PASSWORD = "djwiki";
30 private static final String DATABASE_SCHEMA = "DJWIKI";
31
32 public static void main(String[] args) throws Exception {
33
34 // database connection
35 Class.forName(DRIVER_CLASS_NAME);
36
37 Connection jdbcConnection =
38 DriverManager.getConnection(DATABASE_URL, DATABASE_USER_NAME, DATABASE_PASSWORD);
39
40 IDatabaseConnection connection = new DatabaseConnection(jdbcConnection, DATABASE_SCHEMA);
41
42 System.out.println("Schema : " + connection.getSchema());
43
44 System.out.println("<< データImport開始 >>");
45
46 IDataSet partialDataSet = null;
47
48 partialDataSet = new XlsDataSet(new FileInputStream(new File(TEST_DATA_DIRECTORY + DATA_FILE_NAME)));
49
50 DatabaseOperation.CLEAN_INSERT.execute(connection, partialDataSet);
51
52 System.out.println("<< データImport終了 >>");
53 }
54 }

●設定が必要な箇所
  • 23:XLSファイルがあるフォルダ。
  • 24:インポートするXLSファイル名
  • 26:データベースドライバのクラス名
  • 27:データベースのURL
  • 28:データベースのユーザ名
  • 29:データベースのパスワード
  • 30:データベースのスキーマ名(ユーザ名を大文字にしたもの)
   但し、PostgreSQLはスキーマという概念が存在しないので空にする。



以上の設定が完了したら実行します。


テストケース


基本的に以下の3つのファイルはFlat XML DataSetのファイルと同じです。
  • DBUnitTestCase.java
  • DatabseProperties.java
  • TestData.properties

DBUnitTestDataManager.javaのcreateDataSet(108行目~)を以下のようにします。

01     /**
02      * 引数で渡されたファイル名を元にXLSファイルを読み込み, IDataSetを生成し返却する.
03      *
04      @param testDataFile テストファイル名
05      @return IDataSet
06      */
07     protected IDataSet createDataSet(String fileNamethrows Exception {
08 
09         if (fileName == null)
10             return null;
11 
12         IDataSet dataSet = null;
13         try {
14             dataSet = new XlsDataSet(
15                 new File(databaseProperties.getTestDataDirectory() "/" + fileName + ".XLS"));
16         }
17         catch (FileNotFoundException e) {
18         }
19 
20         return dataSet;
21     }

テストの実行


通常JUnitのテストケースを作成する場合は"junit.framework.TestCase"クラスを継承しますが、DBUnitTestCaseを継承してテストケースを作成します。

実行方法はJUnitと同様です。

テストケース内のsetUp()でデータのクリーンInsertを行い、tearDown()でデータの消去を行います。

よって、テスト終了時にはデータベースのデータは無くなります
(Exportする際に指定したテーブルのみ。)


注意点


出力されたXLSファイルで、各データの間に空白データがあるとNullPointerExceptionが発生します。

ダメな例)

これならOK)


Attached File: [Attached File All List] poi1.jpg[59KB]

Lastmodified: 2010-09-09 (木) 07:42:55 (10h)