メニュー

DBUnitの設定方法について

2020 5/06
DBUnitの設定方法について

読者の皆様、こんにちは。
イッシーです。

今回は、Javaで作成したアプリについてデータベース検証を行う時に使用するDBUnitについてお伝えしたいと思います。

目次

DBUnitを使用する理由

DBUnitを使用したきっかけとしては、特定のテーブルに大量データを作成するときに、insert文を1個、1個書いていくのは非常につらい作業ということで、xmlやエクセルファイルを使用することで、insert文を綺麗に用意する必要がなくなり便利になると考えたからです。

DBUnitを自環境に取り込む(pom.xmlの編集)

筆者はpom.xmlでライブラリ管理を行っているので編集していきます。
gradleを利用されている方は当記事では記載していないのでご了承ください。

<!-- DBUnitを追加 -->
<dependency>
    <groupId>org.dbunit</groupId>
    <artifactId>dbunit</artifactId>
    <version>2.7.0</version>
    <scope>test</scope>
</dependency>

テストデータはエクセルで用意する

ヘッダー(1行目)にカラム名を入力し、2行目から放り投げたいデータを入力します。
シート名にはテーブル名を入力すれば事前準備完了です。

Junitクラスを用意する

コード内にコメント文を記載いたしますので、サンプルコードとしてご参照ください。
前提としてJunitの知識が必要になります。
今回の例は、期待値と実効値がどちらもエクセルで作成されたデータになります。
データベースはpostgreSQLになります。MySQLだと記載が記載が異なるので注意が必要です。

public class DbUnitTest {
 private Connection con = null;
 private IDatabaseConnection dbcon = null;
 IDataSet expectedDataSet = null;

  @Before
  public void setUp() throws Exception {
   // エクセルのファイル名を取得
     String expectedFileName = DbUnitTest.class.getClassLoader().getResource("エクセル名").getPath();
   // コネクションを取得する(データベース接続 / ローカルホスト版)
     con = DriverManager.getConnection("jdbc:postgresql://localhost:5432/データベース名","ユーザ名", "パスワード");
     dbcon = new DatabaseConnection(con);
     DatabaseConfig config = dbcon.getConfig();
     // postgreSQL用の記載。 MySQLだと引数が異なる
     config.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new PostgresqlDataTypeFactory());
   // 期待値のエクセルデータを設定
     expectedDataSet= new XlsDataSet(new File(expectedFileName));
   // エクセルデータを元に削除 / 登録を行う
     DatabaseOperation.CLEAN_INSERT.execute(dbcon, expectedDataSet);
  }

  @Test
  public void test() throws Exception {
   // 確認したいテーブル名を設定して期待値を取得
     ITable expectedTable = expectedDataSet.getTable("テーブル名");
     IDataSet databaseDataSet = dbcon.createDataSet();
   // 確認したいテーブル名を設定して期待値を取得 
     ITable actualTable = databaseDataSet.getTable("テーブル名");
     // assertEqualsはjunitパッケージにもDBUnitパッケージにも存在するので注意が必要
     assertEquals(expectedTable, actualTable);
  }
}

テストコードが書けたらJunit実行して成功すれば完了になります。
お疲れ様でした!

この記事を書いた人

目次
閉じる