>> 古い記事: Ubuntu 11.04でのTomcat 6.0のインストール(help.ubuntu.comのドキュメント日本語訳)
<< 新しい記事: 一定時間だけ指定範囲をハイライトする Emacs Lisp

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

DbUnit メモ

基本的なこと

代表的な(?)使い方

- テーブルのレコード数を期待値と比較 … getRowCount
- テーブルの特定の行・列にある値を期待値と比較 … getValue
- テーブル同士(DBから取得したものとあらかじめ用意した期待値)を比較 … assertEquals
- データセット同士(DBから取得したものとあらかじめ用意した期待値)を比較 … assertEquals

データセットとテーブル

データセット(dataset)は複数のテーブルを持てる。

データセットオブジェクトは
- DB
- XMLファイル
- xlsファイル
から生成できる。
(サードパーティの(DbUnit公式ではない)ライブラリとして
JSON や YAML を利用するものもあるようです)

次の XML では、1つのデータセットに
MEMBERS と ITEMS という2つのテーブルが含まれている。

<?xml version='1.0' encoding='UTF-8'?>
<dataset>
  <MEMBERS ID="1" NAME="ミネア" />
  <MEMBERS ID="2" NAME="マーニャ" />
  <ITEMS ID="1" NAME="ぬののふく" />
  <ITEMS ID="2" NAME="ひのきのぼう" />
</dataset>
xls の場合、ブック(ファイル) が dataset に、シートがテーブルに対応する。

ReplacementDataSet

現在の日時


	private java.sql.Date currentSqlDate(){
		// デフォルトのタイムゾーンで生成
		Calendar cal = Calendar.getInstance();

		return new java.sql.Date(cal.getTimeInMillis());
	}

// ...
		ReplacementDataSet datasetReplacement = new ReplacementDataSet(dataset);
		datasetReplacement.addReplacementObject("[CURRENT_TIMESTAMP]", currentSqlDate());
// ...

エラー

DB2 SQL Error: SQLCODE=-407, SQLSTATE=23502

com.ibm.db2.jcc.am.SqlIntegrityConstraintViolationException: DB2 SQL Error: SQLCODE=-407, SQLSTATE=23502, SQLERRMC=TBSPACEID=3, TABLEID=6, COLNO=1, DRIVER=3.62.56

xls のセルが空なのに NOT NULl なカラムに入れようとした場合。

tbspaceid, tableid からテーブル名を引きたい場合は: 

SELECT tabname
FROM syscat.tables
WHERE tbspaceid = {TBSPACEID}
  AND tableid = {TABLEID}

DB2 SQL Error: SQLCODE=-302, SQLSTATE=22001

com.ibm.db2.jcc.am.SqlDataException: DB2 SQL Error: SQLCODE=-302, SQLSTATE=22001, SQLERRMC=null, DRIVER=3.62.56

入力値がカラム長を超えている場合。

xls + TypeCastException

原因: 空のセル
対処: ReplacementDataSet

いろいろメモ

特定の列を比較したくない

DefaultColumnFilter.includedColumnsTable を使う。

→ DbUnit - Getting Started - Ignoring some columns in comparison

expected に存在する列はすべて actual に含まれるようにしておく。

actual の列:   ID, NAME, VALUE
expected の列: ID, NAME
となっている場合、列 VALUE を無視して ID と NAME だけを比較する。

行の順序

DBからテーブルのスナップショットを取得した場合、
デフォルトでは主キーでソートされている。
自分で行の順番をコントロールした場合は
createQueryTable + "ORDER BY" を使うとのこと。

↓ もうちょっと詳しい説明 + SortedTable の説明
DbUnit - Getting Started - Row ordering

DBのテーブルの件数を取得

IDatabaseConnection の

- int 	getRowCount(java.lang.String tableName)
- int 	getRowCount(java.lang.String tableName, java.lang.String whereClause) 

IDatabaseConnection (DbUnit Framework 2.4.8 API)

xls の末尾に空の行があるとエラーになる

- Ctrl + End を使う
- 条件付き書式を使う

DB2:
  SQLCODE: -407
  SQLSTATE: 23502

その他

データのロード(テーブルへの追加・更新)でエラーが出た時にどのテーブルのどの行・列なのか分かりにくい。 どこが原因なのか特定するのに時間がかかる。

書籍

経験ゼロでもできるプログラミング現場の単体テスト
経験ゼロでもできるプログラミング現場の単体テスト片桐 一宗

翔泳社 2009-05-29
売り上げランキング : 187360


Amazonで詳しく見る
by G-Tools

第4章で DbUnit が扱われています。

見出しの抜粋:

4 DBアクセスの単体テスト
  4-1 DbUnitとは
  4-2 DbUnitを使用したテストの手順
    DbUnitでDBとコネクションを確率(@Before/@After)
    テスト前のDBの状態をバックアップ(@Before)
    テストの前提条件となるデータを設定(@Before)
    テストの実施(@Test)
    バックアップしたデータをDBに戻す(@After)
    データは少なく効果的に
    Excelでテストデータを作成する際の注意点
  4-3 SELECT文を発行するメソッドのテスト
    1件だけ取得するメソッドのテスト
    複数件取得するメソッドのテスト
    テーブル結合のあるメソッドでの注意点
    動的にSELECT文を設定する
  4-4 INSERT文を発行するメソッドのテスト
    null以外のデータを登録
    nullを許可するカラムにnullを格納
    カラムすべてに最大桁のデータを格納
    一意制約に違反するデータを登録
    正常終了時における処理結果の確認
  4-5 UPDATE/DELETE文を発行するメソッドのテスト
    更新対象のレコードがないときの更新
    複数件のレコードを更新
    正常終了時における処理結果の確認
    DELETE文を発行するメソッドのテスト

リンク

>> 古い記事: Ubuntu 11.04でのTomcat 6.0のインストール(help.ubuntu.comのドキュメント日本語訳)
<< 新しい記事: 一定時間だけ指定範囲をハイライトする Emacs Lisp
** ホームに戻る

コメント

コメントの投稿

管理者にだけ表示を許可する

|
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。