単体テストでデータベースから条件等を取得したい場合がありますね。
たとえば
create table addtest(num1 int, num2 int, result int)
こんなテーブルがあって
insert into addtest values(1,2,3);
insert into addtest values(3,0,3);
insert into addtest values(1,1,2);
こんなテストデータの場合です。
これうまい具合にテストを3回繰り返してくれる方法があります。
[DataSource("System.Data.SqlClient", "Data Source=(local)\\yukon;Initial Catalog=テストデータ;Integrated Security=True", "addtest", DataAccessMethod.Sequential), TestMethod()]
こんな具合にテストの属性に書いてしまえば、属性を見てテーブルのデータの回数テストを実行してくれるのです。
ただこのDataSource属性かなりの曲者です。
たとえば単体テストなんですから出来るだけ1回の全体テスト同士は独立している方がいいわけです。テスト結果にすべての情報が格納されて、再現できるくらいになっている方がいいわけです。
このデータソースをAttachDBFileNameを使うことを考えて見ましょう。
属性の解決はコンパイル時ですし、ファイル名はフルパスで書かないといけません。そうドライブ構成、ディレクトリ構成が違う場合には使えないのです。
では配置でファイルをテスト結果フォルダにコピーさせて、このクラスのClassInitialize属性の付いた初期化時メソッドにアタッチさせて、それからDataSource属性のコネクションが張られることを期待してみましょう。
これがなぜかうまくいかない。そうClassInitialize属性の付いた初期化時メソッドより前にコネクションをはっていそうなんです。
ということで今のところうまい解決策はありません。
たまたまそれが動くよりも前に動くクラス初期化の中にアタッチを埋め込んでいますけどね・・・(邪道)