.NETでのDBアクセス層のテスト駆動開発


ASP.NET 2.0を使って、テスト駆動開発を行いたいと考えています。
データベースの検索や更新を行うモジュールをどうやってテストするか悩んでいます。

必要なデータをあらかじめテキストファイルで作成しておき、テストの実行前に自動的にテーブルにロードされるようにしたいのですが、良い方法は無いでしょうか?
RubyOnRailsのFixtureみたいな事が出来れば嬉しいです。
理想的には、
・データ作成が簡単
・データをソースと一緒にソース管理ツールで管理できる
・DBMSになるべく依存しない
ような方法を探しています。

回答の条件
  • URL必須
  • 1人5回まで
  • 登録:
  • 終了:2006/05/17 02:05:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:robbie21 No.1

回答回数35ベストアンサー獲得回数1

ポイント60pt
  • 実際にデータベースの読み書きを行う-DBMSに依存する部分を切り分けてクラスにする。
  • そのクラスからインターフェースを抽出する。
  • そのインターフェースを実装するMockオブジェクトを作る。
  • そのMockオブジェクトが、テキストファイルだかXMLだかを読み書きできるようにしておき、ソースと一緒にテストデータを管理する。
  • あるいは、テストコード中にMockオブジェクトに直接値を設定できるようなメソッドを作っておく

テストコードの例

  //テスト用DBの作成
    MockDb mockDb = new MockDb();
  //テスト用データ(tanaka)をMockDbに追加しておく、
    //MockDbは単純に追加しておいたデータをそのまま返すクラス。
    Person tanaka= new Person("tanaka",28);
    MockRecord record = new MockRecord();
    record.AddField("Name",tanaka.Name);
    record.AddField("Age",tanaka.Age);
    mockDb.AddRecord(record);
    
  //DbReaderがここでテストしたいDb検索用のクラス
    DbReader personReader = new DbReader(mockDb);
  //正しく値が取り出せているか検証    
    Person person = personReader.getPerson("tanaka");
    AssertEquals(tanaka.Age,person.Age);

といった感じでどうでしょうか。

http://www.atmarkit.co.jp/fdotnet/tools/nunit22_02/nunit22_02_02...

http://patterns-wg.fuka.info.waseda.ac.jp/study/7th-oota.pdf

id:zorio

ご回答ありがとうございます。

ちょっと私の要望とは違います。

まさにテストをしたい部分が、Mockと置き換わっています。

ちなみに、1テーブルからレコード全体を1件~数件取るような単純なケースもありますが、5~10個のテーブルをJOINしたり、あるテーブルの内容に従って動的にクエリを作成したりすることもあります。

どっちかと言うと、そういうクエリが複雑な場合のテストが自動化できる事が重要です。

2006/05/10 06:56:04

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません