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テスト・ケース]