dbunit-extension

以前、公開だけして紹介していなかったので、ここで紹介。

dbunit-extensionというだけあって
dbunitの拡張である。


なにを拡張するのか?より、なぜ作ったのか?
を説明する方が分かりやすかろう。

これは、私が実際にdbunitを使っていて不便だと思ったことに端を発する。
dbunitを使うようなテストは(というかjunitも)簡単でなければならないと常に思ってはいるが、そうは問屋が卸さない場合が多数ある。
これは、ソフトウェア開発に携わるようになって、ある程度できるようになってくるとぶち当たる矛盾(?)だ。
こんなのを作って良いのか?と思いつつ作ることもある。
設計しかり、組織のしがらみとは結構あるものだ。
(私は独立しているのでそういう問題には悩まされていないが。)

話が逸れてしまった。
複雑になれば当然、間違いも出てくる。
DBは通常複数のカラムを伴い、処理1つで複数行変更があるのが普通だ。
そうなると、1カラムだけ間違っているというのはほぼありえない。
間違いが間違いを呼び、波及してゆく。

dbunitjunitの思想を汲んでいるのであろう。(当然か)
初めに見つけた間違いを吐き出し、強制終了となる。
こうなると、お手上げだ。
初めに見つかる間違いがあるカラムが違っていることによって波及してくる問題だとは気付けないからだ。(そういうことが多々あるということ)

そうなると、デバックもしくはDBを開いて違いを検査する必要がある。
後者は非常に労力を要する。 非常にだ。
無駄な作業とも思えるこの問題を解決するためにdbunit-extensitonは生まれた。


「だったら、全部出せば良い。」
このコンセプトの元開発されたのがdbunit-extensitonだ。

使い方は簡単だ。
dbunit.extension.Assertionクラスの
assertEquals()メソッドに比較したいITableもしくはIDataSetを渡してやれば良い。

初期状態では標準ストリームに比較結果が出力される。
これはちょっと見にくいので、
dbunit.extension.assertion.HtmlOutputVisitorクラスを使うと良いだろう。
さもfitnessのようなHTMLを吐くことが出来る。
開発で非常に重宝したのは言うまでも無い。

HtmlOutputVisitor visitor = new HtmlOutputVisitor();
visitor.setOutputPath("<出力先パス>");
Assertion.setVisitor(visitor);
で出力先が標準出力から、HTMLファイル出力へ変更される。
見てのとおりvisitorパターンを使用している。
インターフェイス
dbunit.extension.assertion.AssertTagVisitorだ。
各ユーザで個別の出力をしたい場合は、これを実装したクラスを作ればよい。
非常に明快だろう。

ソースも同梱してあるので、HtmlOutputVisitorを参考にすれば作るのは簡単だろう。


アジャイルのやり方とは相反する部分があるかもしれない。
だが、こうせざるを得ない場合にはぜひこのツールを活用していただきたい。

あなたに更なる翼を。 pluswingのミッションである。
http://pluswing.net/download/DbunitExtension.zip