UTFlute-Seasar 0.1.0 Released

UTFlute-Seasar-0.1.0 was released.

JUnitを使ったSeasar対応のテストフレームワークで、
DBFluteのサブプロジェクトとして提供しています。

主には DBFlute を使った環境の単体テストを想定した
便利な仕組みを提供しますが、DBFluteを使っていない
環境でも利用できるようにしています。
(今後もできるだけそうします)

また、細かく制御ができて多くの人が利用できる
現場フィットなもの...漠然としていますが、
つまりはDBFluteっぽいテストフレームワーク
を目指しています。
現時点では、主に以下のような機能が利用できます。

A. (S2TestCaseのような)テストクラスへのインジェクション
B. テストごとの自動トランザクション、自動ロールバック
C. テスト内でnewしたクラスにインジェクション
D. スレッドセーフをテストする仕組み (マルチスレッド実行)

既に、dbflute-basic-example, dbflute-sastruts-example, 
dbflute-mysql-example におけるテストで利用されています。

A と B は必要最低条件と言えるでしょう。

C は、例えば SAStruts の Action クラスを想定していて、
テスト内で new して環境依存の AOP 処理を外しつつ、
(必要なら)オーバーライドでピンポイントで Mock しながらも、
依存コンポーネント(Behaviorなど)は自動で解決できます。
実際に example ではこの方式で Action をテストしています。
SearchAction searchAction = new SearchAction() {
    @Override
    protected Foo getFooFromSession() {
        return new Foo();
    }
};
inject(searchAction); // ActionForm や Behavior を DI

// リクエストパラメータで検索条件が入力された(つもり)
searchAction.memberSearchForm.condMemberName = "S";
searchAction.memberSearchForm.condMemberStatus = "FML";

// ## Act ##
// @Execute の付いたメソッド (検索ボタンが押された)
String moveTo = searchAction.doSearch();

// ## Assert ##
// 検索された結果が「こう」なっているはず
List<Member> memberList = searchAction.resultItems;
...
「new して inject して」ってパターン、これがポイントと考えています。

Action 自体を DI してもらうこともできますが、業務ではActionに
対して環境依存な AOP を掛けていることが多々あります。また、
AOPに限らず環境依存な処理がロジックに含まれる場合もあります。

テストでは、自分で new して好きなようにオーバーライドできるのが
一番ディベロッパーにとってわかりやすく簡単であろうと考えます。
(多くの人は単体テストの環境や実装に慣れていないものです)
ただ、それでもやはり依存性は誰かに解決してもらいたいので、
ActionForm や Behavior などの DI、それは UTFlute が。

また D は、DBFlute自体のテストでスレッドセーフのテストを
そこら中で書いているのでそのため...(つまり jflute がうれしい)
と言えますが、業務でもここぞという場面で利用できるんじゃないかと。
JUnit4 のライブラリを利用しつつも、
あえて JUnit3 (3.8系) 方式で提供しています。

@Testアノテーションを付ける必要はなく、
(test -> ctrl + space -> enter で補完したメソッドでOK)
スーパークラスに便利メソッドがぎっしり詰まっています。
その方が、技術追求よりも実業務を優先して日々を戦っている
ディベロッパーの方に受け入れられやすいと考えているからです。

厳密には、
JUnit4 と JUnit3 の折衷で良いとこ取り
を考えています。
将来的には、もっと現場に特化した便利な機能を備えて
いきたいと思います。また、Spring対応やGuice対応も。
また、何かNEWSがあれば通知していきます。

groupId: org.seasar.dbflute
artifactId: utflute-seasar
version: 0.1.0

追記 @2011/07/26
既に 0.1.1 でSpring対応しました。