BLOG

DBUnitでバックアップファイルを作成する方法

こんにちは!ririです。

現在、 JUnitとDBUnitを使用してSpringBootアプリケーションの単体テストを行っています。
今日は、 DBUnitでテスト対象のテーブルのバックアップファイルを作成し、テストデータをデータベースに投入するところまで進んだので、記録をブログに残します。

①DBUnitとは
②バックアップファイルの作成
③テストデータの投入
④データベースの復元
⑤まとめ

の順で書いていきます。
参考にしたサイトはこちらです。

①DBUnitとは

DBUnitはデータベースにアクセスするプログラムをテストするためのフレームワークです。
JUnitと一緒に使用して、データベースの更新処理のテストや、テスト用のデータをデータベースに投入することができます。

②バックアップファイルの作成

テスト実行前の状態に戻すためにバックアップファイルが必要になります。
テスト対象のテーブルのデータを指定して作成します。

まず、データベースへ接続するためのコードを記述します。

// DBコネクションを取得
String jdbcUrl = "jdbc:mysql://localhost:3306/スキーマ名?useUnicode=true&useJDBCCompliantTimezoneShift"
+ "=true&useLegacyDatetimeCode=false&serverTimezone=UTC";

Connection jdbcConnection = DriverManager.getConnection(jdbcUrl, "ユーザー名", "パスワード");
IDatabaseConnection connection = new DatabaseConnection(jdbcConnection);

次に、バックアップファイルを作成します。

//現状のバックアップを取得
QueryDataSet queryDataSet = new QueryDataSet(connection);
queryDataSet.addTable("テーブル名", "SELECT * FROM テーブル名;");
FlatXmlDataSet.write(queryDataSet, new FileOutputStream("./backup.xml"));

③テストデータの投入

ここでは、テストデータをデータベースに登録します。
バックアップを作成してあるので、登録済みのデータがある場合は一度すべて削除してから、テストデータを登録します。
テストデータは、予めxml、csv、xlsxのうちのいずれかの形式でファイルを作成しておきます。
私は、xml形式で作成しました。

//テストデータを投入
IDataSetProducer producer = new FlatXmlProducer(new InputSource("dataset/test.xml"));
//登録済みデータの削除
DatabaseOperation.DELETE_ALL.execute(connection, new StreamingDataSet(producer));
//テストデータを登録
DatabaseOperation.INSERT.execute(connection, new StreamingDataSet(producer));

④データベースの復元

②で作成しておいたバックアップファイルを使用して、データベースを復元させます。

// DBコネクションを取得
String jdbcUrl = "jdbc:mysql://localhost:3306/スキーマ名useUnicode=true&useJDBCCompliantTimezoneShift"
       + "=true&useLegacyDatetimeCode=false&serverTimezone=UTC";

Connection jdbcConnection = DriverManager.getConnection(jdbcUrl, "ユーザー名", "パスワード");
IDatabaseConnection connection = new DatabaseConnection(jdbcConnection);
//バックアップファイルの読み込み
IDataSetProducer producer = new FlatXmlProducer(new InputSource("backup.xml"));
//テストデータの削除
DatabaseOperation.DELETE_ALL.execute(connection, new StreamingDataSet(producer));
//テスト実行前のデータを登録
DatabaseOperation.INSERT.execute(connection, new StreamingDataSet(producer));

⑤まとめ

ここまで準備すれば、JUnitでデータのテストができます。
私の場合は、テストデータを投入するところで苦戦しました。
テストデータを作成した段階で、そのデータが登録可能かどうかをWorkbenchで確認したほうがいいです。

今回は以上になります。
ご覧いただき、ありがとうございました。

BLOGトップへ戻る