Index: [Article Count Order] [Thread]

Date:  Thu, 16 Oct 2003 18:58:19 +0900
From:  t-ushio@....com
Subject:  [XP-jp:04693] Re: DBのテスト
To:  extremeprogramming-jp@....jp
Message-Id:  <20031016185819t-ushio@....com>
In-Reply-To:  <68C393C1A0DA19shimoji@....jp>
References:  <68C393C1A0DA19shimoji@....jp>
X-Mail-Count: 04693

牛尾でございます。

>で、質問なんですが、テストファーストで開発を行うときに、テストメソッド
>が非常に書きづらい場面があると思います。
>たとえば、
>“テーブルAからデータを読み込み、読み込んだデータに基づいてテーブルB
>を更新する”、という処理がある場合、
>当然、テーブルAに入っているデータによって処理結果が変わってきます。
>どういう風にテストメソッドを書けばよいのでしょうか。

 あまり参考になるかどうかわかりませんが、特に更新処理の場合私は
EJB2.0のCMPを使用していました。CMPのインターフェイスを継承した
Mockクラスをつくって、それに対してテストしていました。
 また、移送部分などもあり、面倒なので、Relaxerでジェネレータを
つくり、項目定義、名称定義から、CMP本体(移送込み),DTO,DD,CreateTable…、
それに、テスト用Mockクラスまで吐かせていました。
他にはMock Makerなんていうツールもあるみたいです。

 トルクや自作のO-Rマッパーでも工夫すればうまくテストできる
のでは?

 検索系で動的に複雑な組み合わせの検索のSQLを組み立てる必要がある場合は検索キーを表すオブジェクト
などを作って(キーをセットするとWhere句以降のSQLがGETできる、、という感じ)
そのオブジェクトをテストしたりしました。

 あとは某知り合いのスーパープログラマーは、もっと渋い方法を私におしえて
くれましたが、近々発表されるかもしれないので、この場ではふせておきます。:-)

>その処理をストアドプロシージャで実装するとなると、なおテストが
>書きにくいなぁと思っております。

ちなみにこんなんあるみたいですね。(無論つかってないけど)
http://c2.com/cgi/wiki?PlSqlUnit

以上です。