技術的雑談-DBUnitを使ってハマった事色々
環境
- JDK 1.6.0_06
- 確認はWindows上で行いました(XPsp2)
- DBUnit 2.2.1
ハマリ(1)
Q.XMLファイルにBooleanはどうやって書くの?
A. true="1",false="0"と書くのが良さそうです。
hoge="true"と書いても「そんなColumnない!」とか言われました。
ほとんどのRDBMでBooleanはBITとかCHARの別名なので、まあ、多分大丈夫っぽい。
(未検証、動いちゃったベースだけど。でもFAQにもどこにも書いていないからあえて書いてみる実験。私が常識知らずといううわさも無きにしも非ず。)
Q.H2DatabaseにXMLからデータ差し込もうとすると、BooleanのTypeが認識できない?
A. DatabaseConnection()ではなくH2Connection()を使いましょう。
以下は私がやったときのWARNINGメッセージ。
WARNING - USER.DELETED data type (16, ?BOOLEAN?) not recognized and will be ignored. See FAQ for more information. (本当は1行で表示されます。)
※H2DatabaseのFAQ見ると'BOOLEAN'って書いてあるけど、DOS窓では?になっている。文字化け?
で、FAQを見ると、
「DatabaseConnection()のインスタンスからgetConfig()して、それにsetProperty()でH2DataTypeFactoryブチこめ」
って書いてあるんだけど、そんなことしなくても「org.dbunit.database.DatabaseConnection」の代わりに「org.dbunit.ext.h2.H2Connection」を使えばその辺は自動的に内部でやってくれる感じ。
オシイのは、どうせJDBCのConnectionからIDatabaseConnection作るんだから、内部で接続URL見て勝手に振り分けてくれないことかなぁ…。
(ソース見てみた感じでは実行時のPeropertiesでその辺を差し替えるのも無理っぽいし、それらしき記述の部分を使ってみたけど変化無かった。)
なので、正確には、
- 普通にDatabaseConnectionをnewした後に、ConfigurationのsetProperty()でH2DataTypeFactoryを突っ込む。
- H2ConnectionなどのRDBMに特化したIDatabaseConnection類を使う。
のどっちかですね。
その辺は好みと要求で使い分けてみてください。
(私は接続URLが「jdbc:h2:」で始まっていたらH2Connectionを使う…なんていう外道実装しましたが。)
参考URL
→1番目の方法が載ってます。
→DBUnit本家のFAQのページ(あらかじめ読んでおかないと色々ハマるかも…)
- ソースコード
→DBUnit2.0、2.1、2.2、2.2.1で結構機能的な差分があります。H2Connectionも2.2以降らしい。
Q.DBUnitのデバッグログがlog4j.xmlに書いても出てこない。
A. DBUnitではslf4jを使っています。
log4jでかつてメインを張っていた人たちがスピンアウトして作ったログファシリティーらしいです。
(ざっと読んだ限りではJCLと張り合ってる?感じ。)
実装的にはJCLと同じように薄いラッパーだけで、実際にlogを書き出すのは他の実装任せ…らしいけど、よくわからない(汗)
そのうちslf4jわかったら追記します…。
履歴
2008/04/21 -- 初版
技術的雑談へ戻る