Index: [Article Count Order] [Thread]

Date:  Thu, 16 Oct 2003 20:25:43 +0900
From:  Takuto Wada <t-wada@....jp>
Subject:  [XP-jp:04695] Re: DBのテスト
To:  extremeprogramming-jp@....jp
Message-Id:  <20031016202525.9C74.T-WADA@....jp>
In-Reply-To:  <3f8e6830.7221%tanaq@....jp>
References:  <68C393C1A0DA19shimoji@....jp> <3f8e6830.7221%tanaq@....jp>
X-Mail-Count: 04695

こういちさん、田中さん、はじめまして。
和田と申します。

On Thu, 16 Oct 2003 17:43:53 +0900
下地功一 <shimoji@....jp> wrote:
> こういちと申します。
> XP初心者(というか未経験)です。
<snip />

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

DB絡みのテストに関しては大きく分けると三つのアプローチがあると思います。
1. モックオブジェクトアプローチ
  モックオブジェクト技法等を使用してDBに繋ぎに行かずにメモリ上でテストを行う方法
2. 結合テスト的アプローチ
  テスト用のDBを用意し、テスト用DBに対してテストデータを
  セットアップしてテストを行う方法
3. 設計主導アプローチ
  永続化レイヤーやドメインオブジェクト等を導入して
  業務ロジック自体をDBに依存しないように設計し、
  DB接続のテストと業務ロジックのテストを切り分ける方法

私は1,2,3全てのアプローチを混ぜて開発しています。
特にテストファーストで開発を行う場合にはモックオブジェクトアプローチ
を使用して、メソッドレベルのテストを積み上げていく形で開発を行います。

ただ、ストアドプロシージャを組まれるのであれば、
DBに近いレイヤーのコードを書いていることになると思いますので、
私は結合テスト的アプローチをとります。

まずローカルの開発端末にDBMSをインストールしてテスト用DBとします。
(商用DBMSであっても開発者ライセンスはそれほど高価ではないと思います)
そしてテスト対象メソッドの事前条件と事後条件をテストデータファイルとして
用意し、JUnitのようなテストドライバからテストを実行します。
テスト実行の際にテスト毎にdelete-insertを行い、事前条件のセットを行います。

ちなみに、ストアドプロシージャのテストドライバとしては
SQLUnit[http://sqlunit.sf.net/]
があるようです(私はまだ試していませんが、近日試してみる予定です)
テストの実行環境にはJavaとJDBCドライバが必要ですが、
テスト自体はXMLで書くようです。

また、開発言語がJavaであればDBUnit[http://www.dbunit.org/]を使用して
結合テスト的アプローチのテストを簡単に行うことができます。



On Thu, 16 Oct 2003 18:43:12 +0900
Tanaka-Qtaro-Yasuhiro <tanaq@....jp> wrote:
> 田中久太郎です。
> 
> 下地功一さんの<68C393C1A0DA19shimoji@....jp>から
> >なにか参考になる書籍、Webサイトなどご存知ないでしょうか?
> 
> 「データベースの進化的設計」
> http://objectclub.esm.co.jp/eXtremeProgramming/evodb-jp.html
> 
> 上記の翻訳はかなり参考になりました。
> 
こなれていない翻訳になってしまって申しわけありません。
それでも参考になると言って下さった方がいて正直うれしいです。
時間があればもう少し読みやすいように手直ししようかなと思っています。


以上です。

-- 
Takuto Wada <t-wada@....jp>