LoginSignup
22
17

More than 5 years have passed since last update.

DBUnit - DatabaseOperationの挙動

Posted at

DBUnitとは

JavaでDBのテストを行う際に、データをよしなにやってくれるすごいやつです。
XMLとかExcelとかにデータを書いておくと、勝手にDBにデータを設定してくれます。
TRUNCATEとかINSERTとかUPDATEとかいろいろできます。

使用バージョン

名称 バージョン
JDK 1.8.0_25
JUnit 4.12
DBUnit 2.5.1

「データセット」とは?

DBUnitについて調べてて気になったのが「データセット」という単語。
DBUnitの説明に必ず出てくる割には、これがどういったものなのかぴったりくる説明がありませんでした。

これは、テーブル名・カラム名・データ・主キー の情報のかたまりです。

この情報はIDataSet#getTableMetaData()で取得できます。

ちなみに主キー情報はテーブルからデータを取得した時に設定されます。

DatabaseOperationの挙動

DatabaseOperationについて試したり調べたりする機会があったのですが、現在のバージョンではJavadoc(英語)くらいしかいい資料がなかったのでまとめてみました。

もし外部キー制約違反や一意性制約違反が起こった場合は、org.dbunit.DatabaseUnitExceptionが発生します。
この例外は、各DBMSの例外をラップしています。

全てのDatabaseOperationにおいて、外部キー制約違反となる場合は上記の例外が発生します。

INSERT

  • データセットのデータがDBにインサートされる。
  • 実行した結果一意性制約違反となる場合は例外が発生する。
  • DBに主キーが設定されていない場合も実行可能。

CLEAN_INSERT

  • データセットで指定したテーブルのデータが全て削除され、データセットのデータがDBにインサートされる。
  • 実行した結果一意性制約違反となる場合は例外が発生する。
  • DBに主キーが設定されていない場合も実行可能。

DELETE

  • データセットのデータと主キーが一致しているデータが削除される。
  • DBに主キーが設定されていない場合は、例外org.dbunit.dataset.NoPrimaryKeyExceptionが発生する。

DELTE_ALL

UPDATE

  • データセットのデータと主キーが一致しているデータが更新される。
  • DBに主キーが設定されていない場合は、例外org.dbunit.dataset.NoPrimaryKeyExceptionが発生する。

TRUNCATE_TABLE

REFRESH

  • データセットのデータと主キーが一致しているデータが存在しない場合はインサートされ、存在する場合はデータセットの内容に更新される。
  • DBに主キーが設定されていない場合は、例外org.dbunit.dataset.NoPrimaryKeyExceptionが発生する。

NONE

  • 何もしない。
  • プロパティの値によってDatabaseOperationを切り替えたい時に使うと便利。

補足

前のバージョン(いつかはわからない)だと「TRUNCATE_TABLE」でテーブル自体が消えてしまっていた?

DatabaseOperationを使用しただけでは、「テーブルの削除」「主キーの更新」等はできなさそうです。
DBUnitを使用した他のやりかたがあるのかは調べてません。

感想

テスト用途なのでCLEAN_INSERTとTRUNCATE_TABLEとNONEあたりが使えれば十分だと感じました。

22
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
17