VS2005環境でのNAgile - テスト用SQLデータベース

結局ソースコード管理ツールにmdfファイルを追加して同時に複数のクライアントからmdfファイルをチェックアウトするとldfファイルとの整合性が取れなくなるみたいで使い物にならない。

そこで開発サーバーにテスト用データベースを作成することにした。

#この場合は分散トランザクション コーディネータ(MSDTC)をネットワーク トランザクションに対して有効にしてやる必要がある。

参考:Windows Server 2003 または Windows XP Service Pack 2 のインストール後、リンク サーバーに対して分散トランザクションを実行すると SQL Server 2000 でエラー メッセージ 7391 が表示される

しかし行ロックをするようなトランザクションがあるとタイミングによってテストが失敗するので結局クライアント毎のSQL Server Developer Edition上にテストDBを作成する元の方法に逆戻り。。。

今まではローカルのSQL Server 2005 Developer Editionに開発サーバー上のデータベースをコピーしてテスト用データベースにしていた。

この方法だとデータベーススキーマに変更があった場合はクライアント毎にローカルのデータベースを修正するのが面倒だ。そこでテスト用SQLデータベース(*.mdf)をテストプロジェクトに追加してTFSのソース管理に突っ込むことにした。手順は以下のとおり。

  1. テストプロジェクトに項目の追加でSQLデータベースを追加する。ファイル名は開発サーバーのデータベース名と同じにする。
  2. SQL Server Management StudioでローカルのSQL Serverに接続し、データベース→アタッチでプロジェクトに追加したmdfファイルを選択してアタッチする。
  3. データベースダイアグラムでテーブルを作成する。
  4. アタッチしたテーブルを選択してデタッチする。

#VSのIDEでサーバーエクスプローラからmdfファイルへの新しい接続を追加して、データベースダイアグラムを編集してもいいだろう。

このmdfファイルへの接続文字列設定はこんな感じ。

<connectionStrings>
 <!-- テスト用DBへの接続 -->
 <add name="Library.DataAccessLayer.Properties.Settings.LibraryConnectionString"
  connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=C:\NAgile\Library\src\Library.Tests\Library.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"
  providerName="System.Data.SqlClient" />
</connectionStrings>

現在Team Foundation Server Beta3 Refreshのソースコード管理ツールを使用しているが、プロジェクトにmdfファイルを追加するとチーム開発においてちょっとした問題が発生した。

TFSのソースコード管理ではデフォルトでDatabase Files(*.mdb; *.mdf; *.sdf)の複数チェックアウトが無効になっているので、クライアント毎にmdfファイルがチェックアウトできない。このままではチェックアウトしているメンバー以外はテストが実行できない。

そこで以下の手順でmdfファイルの複数チェックアウトを可能にした。

  1. VSのIDEでチームエクスプローラを表示した状態でチーム→Team Foundation Serverの設定→ソース管理ファイルの種類を選択してファイルの種類ダイアログを開く。
  2. ファイルの種類でDatabase Filesを選択し、編集ボタンをクリック。
  3. ファイルのマージおよび複数のチェックアウトを有効にするにチェックを入れる。
  4. これだけでは不可解なエラーメッセージがでるのでファイルの種類でAudio/Video Filesを選択してAudio Video Files等に名前を変更する。(/の文字がファイルの種類で入力できない文字になるみたい。Beta3だから許す。)
  5. OKボタンでファイルの種類ダイアログを閉じる。

これでクライアント毎にmdfファイルをチェックアウトしてテストが実行できる。