JUnit

DBUnitでテストデータを追加後にデータ検索メソッドのテストを実施してみた

DB接続に関するテストをJUnitで実施するには、DBUnitというツールを利用すると、テストメソッドを実行する前に、データを追加したり削除したりすることができる。

今回は、追加用データをXMLとCSVそれぞれで準備し、準備したデータを追加後に、データ検索メソッドの実行を確認するJUnitのテストを実行してみたので、そのサンプルプログラムを共有する。

前提条件

下記記事の実装が完了していること。

Spring BootのWEB画面上でデータ検索機能を追加してみた(ソースコード編)今回も引き続き、Spring BootのWEB画面上でデータ検索機能を追加した実装について述べる。ここでは、具体的なサンプルプログラムの...

作成したサンプルプログラムの内容

作成したサンプルプログラムの構成は以下の通り。
サンプルプログラムの構成
なお、上図の赤枠は、前提条件に記載したソースコードと比較し、変更になったソースコードを示す。赤枠のソースコードについては今後記載する。

まず、build.gradleには、以下のように、DBUnitを利用できる設定を追加している。

上記のようにbuild.gradleにDBUnitの設定を追加すると、以下のように、外部ライブラリでDBUnitのライブラリが追加されていることが確認できる。
DBUnitのライブラリ

また、今回テスト対象となるUserDataMapperクラスのSQLファイルは以下の通り。今回はfindByIdメソッドがテスト対象となる。

さらに、XMLとCSVでデータ追加を行うテストクラスに共通の処理を、以下で定義している。

上記クラスでは、ファイルのデータをデータベースに取り込む処理と、結果確認用オブジェクト生成処理を定義している。ファイルのデータを取り込む処理は、サブクラスで実装するようになっている。
また、データベース接続する際は、AmbiguousTableNameException例外の発生を防ぐために、スキーマ名を指定している。

さらに、データベースに取り込むファイル(XML)を指定しデータ検索メソッドの実行を確認するクラスは、以下の通り。

また、このときに取り込むXMLファイル「user_data.xml」の内容は以下の通り。

上記定義により、user_dataテーブルとm_sexテーブルそれぞれに、レコードが2件ずつ追加される。各テーブル名のタグ内に、各カラムの設定値を指定している。

さらに、データベースに取り込むファイル(CSV)を指定しデータ検索メソッドの実行を確認するクラスは、以下の通り。

また、このときに取込対象CSVファイルを指定する「table-ordering.txt」と、取込対象CSVファイルは以下の通りで、「table-ordering.txt」には、取込対象となるテーブル名を指定する必要がある。
<table-ordering.txt>
table-orderingテキスト

<user_data.csv>
user_data_CSVファイル

<m_sex.csv>
m_sex_csvファイル

その他のソースコード内容は、以下のサイトを参照のこと。
https://github.com/purin-it/java/tree/master/junit-dbunit-select/demo

作成したサンプルプログラムの実行結果

XMLファイルのデータを取り込んでデータ検索メソッドの実行を確認するクラス(UserDataTestXml.java)の実行結果は以下の通り。
UserDataTestXmlの実行結果
上記赤枠で、userDataMapper.findByIdメソッドにより取得した値が確認できる。

また、実行後のDBのテーブルデータは以下の通りで、XMLのデータがテーブルに格納されていることが確認できる。
USER_DATAテーブルの値
M_SEXテーブルの値

さらに、CSVファイルのデータを取り込んでデータ検索メソッドの実行を確認するクラス(UserDataTestCsv.java)の実行結果は以下の通り。
UserDataTestCsvの実行結果
上記赤枠で、userDataMapper.findByIdメソッドにより取得した値が確認でき、取得値がXMLの場合と同じであることが確認できる。

また、実行後のDBのテーブルデータは以下の通りで、CSVのデータがテーブルに格納されていることが確認できる。
USER_DATAテーブルの値
M_SEXテーブルの値

要点まとめ

  • DBUnitというツールを利用すると、テストメソッドを実行する前に、データを追加したり削除したりすることができる。
  • DBUnitでは、追加対象のデータタイプに、XMLまたはCSVも指定できる。
  • DBUnitでは、データベース接続用にはIDatabaseConnectionクラスを、データセットにはIDataSetクラスを利用すればよい。

なお、今回取り上げていないが、追加対象のデータタイプにエクセルファイルも指定できる。詳細は下記サイト等を参照のこと。
http://teqspaces.com/DBUnit/1