Fight the Future

Java言語とJVM、そしてJavaエコシステム全般にまつわること

IT勉強会での初プレゼンなどお助けします!

勉強会でスピーカーをやりたいけど、プレゼンが初めて、苦手という方に無償でコーチできます。スライドのレビューや録画したリハへのアドバイスなどなど。Twitter@jyukutyoまでメンションでもDMでもお気軽にご連絡ください。

私はIT講師の経験があり、プレゼンはデブサミやJJUG CCCなど200人規模の経験が豊富で最大800人の前でプレゼンしました。海外ではDevoxxUSで。デブサミ2017では公募スピーカー1位、デブサミ関西2012アワードで5位となりました。

DbUnitのDatabaseTestCaseを継承して独自のテストフレームワークを作る

DatabaseTestCaseクラスには2つの抽象メソッドがあります。

/**
 * Returns the test database connection.
 */
protected abstract IDatabaseConnection getConnection() throws Exception;

/**
 * Returns the test dataset.
 */
protected abstract IDataSet getDataSet() throws Exception;

getConnection()ではIDatabaseConnectionの実装クラスであるDatabaseConnectionオブジェクトを生成して返します。DatabaseConnectionのコンストラクタにConnectionオブジェクトを渡します。なので、DriverManagerからでもConnectionオブジェクトを作りましょう。

Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
IDatabaseConnection databaseConnection = new DatabaseConnection(conn, "スキーマ名を大文字で");

URLはDB2なら「jdbc:db2://localhost:50000/AWE2W1T」とか。USERはデータベースユーザ名で。DatabaseConnectionのコンストラクタにはスキーマも渡すことができます。DB2なら渡しておくほうがいいです。

しかも「大文字」で。

DbUnitの内部でスキーマは大文字で保持しているので、小文字で渡すとダメでした。ケースは無視してほしいなあ。さらにDBごとの設定もできます。

DatabaseConfig config = databaseConnection.getConfig();
config.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new Db2DataTypeFactory());

DBの文字列とか数値とか日付っていう基本的な列しか使わないならこの設定はいらないっぽい。
getDataSet()ではDBの初期化のためにIDataSetの実装クラスを返すわけですが、excelで初期化データを作るなら、ここの以前の日記を参考にInputStreamを作成してください。

InputStream initFile = excelから作成したInputStream;
IDataSet dataSet = new XlsDataSet(initFile);

って感じです。