覚書き/DbUnit

注意点

外部キー制約がある場合は、setUp()で単純にテストデータを初期化できない。

概要

  • まあ当たり前といえば当たり前なんですが・・・。
    後からテーブル追加して、関連を持つ、つまり外部キー制約を付けたりすると、
    もともとsetUp()で初期化のためにDeleteしてたデータが、Deleteできなくなります。
    そして以下のようなexceptionが出ます。
com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails
(`DB名/テーブルB`, CONSTRAINT `FK_TABLE_2_1` FOREIGN KEY (`外部キーとなるカラム名`) REFERENCES `テーブルA` (`参照されてるカラム名`))
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1011)
  • テーブルA:被参照テーブル
  • テーブルB:外部キー制約を設定するテーブル。こいつがテーブルAを見てる。

解決策

  • 特にないです。w
    外部キー制約を付けたテーブルも、いっしょにデータをいったん削除するなどしましょう。

余談

  • ある意味、新たなテーブルが関連付けられたことがわかる、
    という意味で、単体試験、DbUnitとしての責務は果たしている、といえるでしょう。

テスト実行すると「起動構成の入力タイプが存在しません」とか「Class Not Found」が出たりし始める。

  • テストデータ(xmlファイル)をFileInputStreamで読み込ませようとした。
    ただ、絶対パスか相対パス(eclipseだと/workspceからの相対になる)になる。
    こいつはなんとなく嫌い。
    なので「Javaのビルド・パス」→「ライブラリー」→「クラス・フォルダー追加」でテストプログラムがあるフォルダを追加した。
    (ここでなんとなく「除外にほげほげ追加したよー」とかメッセージが出てたような気がする)
    その後テスト実行すると、「Class Not Found」が出始めて。
     
    で調べてると、「Javaのビルド・パス」の「ソース」タブで、しれっと「除外:ほげほげ・・・」ってさっき「ライブラリー」タブの「クラス・フォルダーの追加」で追加したフォルダが設定されている・・・。
    とりあえず、こいつを削除した。
    その後も「テストプログラムがあるパスを移せ!」とか怒られてたけど、ここの「テストプログラムを別フォルダで分けて管理したい時・・・」を参考に再設定。
    まだ怒られてたんで、eclipse再起動。そして戻った。
     
    途中、テスト実行すると「起動構成の入力タイプが存在しません」ってが出てた。
    これは「実行」の「実行ダイアログ」を開くと、
    実行しようとしているテストプログラムが実行できない構成になっているので、
    おそらくそう怒っているのだと思う。
    このダイアログの左にあるJUnitのツリーから、
    エラー(赤バッテン)の実行構成は、念のため削除した。

java.sql.SQLException: Illegal mix of collations (cp932_japanese_ci,IMPLICIT) and (sjis_japanese_ci,IMPLICIT) for operation '=' ってなエラーが出る。

概要

  • 文字コードの問題。

解決策

  • 今のとこ解決策はここのとおり、テーブル作成時に
    文字コードを指定してあげれば回避できます。

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-02-14 (火) 00:58:08 (2076d)