DBUnit

Last-modified: 2008-07-09 (水) 18:02:15

DBUnitとは?

・データベースにアクセスするプログラムの単体テストツール

試験の流れを考えると、以下のようになる。
・既存データの削除
・テスト用データの投入
・テスト対象プログラムの実行
・テスト結果の確認
・テストデータの削除
・退避データの戻し作業

これらの作業を自動化するのが、DBUnitである。
特徴は、実際にデータベースにアクセスして検証することにある。

DBUnitのインストール

ダウンロード場所
DbUnit.org:(http://www.dbunit.org/
DbUnit-Download:(http://sourceforge.net/project/showfiles.php?group_id=47439&release_id=242511
・最新はdbunit-2.2.3.jar(2008.07.02時点)


ECLIPSEでDBUnitを使う
(1)Eclipseでプロジェクトを起動
(2)プロジェクトを右クリック→プロパティを選択
(3)Javaのビルドパスを選択→ライブラリ・タグを選択→JARの追加/外部JARの追加

プロジェクト内に配置した場合は、JARの追加
プロジェクト外に配置した場合は、外部JARの追加
今回、自環境のEclipse\workspace\プロジェクト\WEB-INF\libに格納

JUnitの設定もする
(1)Javaのビルドパスを選択→ライブラリ・タグを選択→ライブラリーの追加
(2)JUnitを追加
(3)JUnit3を選択→終了

JUnit3/JUnit4が選択できる。とりあえず3を選択。

テストデータ

  • 通常XMLファイルを使う。Excelでも可。
  • 初期化データと期待値データの2ファイルを用意。
  • 初期化データ
  • 期待値データ
    • 期待値データは、テストメソッドごとに作成
  • テストファイル:Excelの場合
    • シートの名前:テーブル名+インデックス(例:USERDATA1)
    • シートの1行目:テーブルの列名、2行目以降にデータ
    • XlsDataSetクラス(Jakarta POI)でExcelを読み込む
Jakarta POIはこちら:http://poi.apache.org/
poi-bin-3.1-beta2-20080526.zipをダウンロード(2008.07.03)
poi-3.1-beta2-20080526.jarをプロジェクトに追加

テストケースの作成
・基底クラスを作る
・抽象基底クラスは、TestCaseを継承した各テストクラスのベースとなるクラス。
・個別のデータベーステストケースは、このベースクラスを継承して作る。

データアクセスクラスの単体テストの特徴
・データベースへのコネクションの確立できること
・SQL文が正しいこと
という実際のデータベースへのアクセス部分を含むところがある。
実際のDBとの結合テストを後回しにせず、単体テストフェーズで刈り取る所に意味がある。

参考URL
DBunitでテストの自動化(http://www.thinkit.co.jp/article/32/1/


エラー

・org.dbunit.dataset.NoSuchTableException: USERDATA

[確認]
テーブル名はXMLファイルに正しく設定済み。
[調査]
スキーマに指定した文字列が小文字だったためらしい。
IDatabaseConnection connection = DatabaseConnection(conn, "test");→×
IDatabaseConnection connection = DatabaseConnection(conn, "TEST");→○

・上記が直ったかと思ったら、、、java.lang.ExceptionInitializerErrorが、、

[確認]
データ登録(CLEAN_INSERT)は、成功。データベースの中身を確認。
[調査]

・java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory

SLF4Jは、複数のロギングシステムをサポートする。NOP、Simple、log4j v1.2、JDK1.4 logging、JCL、logback。そして、いくつかのjar filesがあります。

DbUnitのテストケース自動作成

パッケージエクスプローラーから対象となるクラスを選択
→右クリック→[新規]→[その他]→[Java]→[DbUnit]→[DbUnitテスト・ケース]