Index: [Article Count Order] [Thread]

Date:  Fri, 17 Oct 2003 10:11:25 +0900
From:  石井 勝 <mishii@....jp>
Subject:  [XP-jp:04697] Re: DBのテスト
To:  extremeprogramming-jp@....jp
Message-Id:  <20031017011127.E1A0B331C6@....jp>
In-Reply-To:  <3F8E72DB.9050700@....com>
References:  <3F8E72DB.9050700@....com>
X-Mail-Count: 04697

石井と申します.

> ・ setUpメソッドで、DBの初期化をする。
> テストデータが必要ならそれも突っ込んでおく。
> 
> ・ tearDownできれいさっぱりテストデータを消去する。
> 
> ・ テストメソッドごとにデータを変えたいならメソッド側で
>  テストデータの追加と削除をする。
> 
> void testXXX () {
> テストデータの追加;
> テスト;
> テストデータの削除;
> }
> 
> な感じ?

僕も昔そんな感じで開発していましたが,テーブル数が多い場合やデータベー
スをみんなで共有している場合は難しいと思います.

以前Oracleを使ったシステムでテストコードを書いていたときは次のようにし
ていました.

1) データベースのマスターユーザ(例えばmaster)を作る.
2) 開発者ごとにデータベースのユーザ(例えばmishii)を割り当てる

こうして,データベースのmasterユーザでテーブルを定義し,必要ならマスター
系テーブルのデータを入れておきます.ここまではデータベース管理者の仕事
です.

そうした後,あるテーブル(例えば tableA)が空の場合のテストをしたいと
きは次のようにします.

1) ユーザmishiiでデータベースにログイン

2) setUpでmaster.tableAを利用してmishii.tableAを作成

 ==> create table tableA as select * from master.tableA where 1 = 0;

3) tableAが空の場合のテストを実行

4) tearDownでmishii.tableAを削除

 ==> drop tableA

こうすれば,他の開発者に影響を与えずにテストすることができます.

ユーザmishiiからみると,tableA はmaster.tableAではなくmishii.tableAに
見え,tableBはそのままmaster.tableBに見えることを利用した方法です(ユー
ザの概念はOracleだけかもしれないですが).テストでtableBを更新するなら,
mishii.tableBを作っておいたほうがいいかもしれませんね.

後は,テーブルのセットアップをするためにSQLスクリプトを書いておいて
setup時にそれを読み込む処理を行ったりしていました.

以上,参考になれば.
---
石井