次の設定があります。
- Visual Studio 2012/SQL Server 2012
- TFS 2010、ビルド サーバーは、ビルド時に単体テストを自動的に実行します。
- 多くのコードと 2 つのテスト プロジェクト (つまり、ビルド時に 2 つの個別のアセンブリ) を含むソリューションで、テストは Visual Studio の単体テスト フレームワークで実行されます。
- 最初のアセンブリにはすべての実際の単体テストが含まれており、すべて正常に実行されます。ほとんどのテストでは、データベースにデータを書き込み、コードを実行してから、データを消去します。
- データベースのシード処理には 2 番目のアセンブリを使用します。テストとアセンブリはアルファベット順にロード/実行されるため、名前が "Z" で始まる 2 番目のアセンブリにテストがあります (アセンブリ名も "Z" で始まります)。ビルド サーバー ログは、Z テストが最後に実行されたことも確認します。したがって、このテストはデータベースに一部のデータのみを書き込みます。Excel ファイルからデータを読み取り、SQL Server に書き込む既存のインフラストラクチャのため、DB プロジェクトを使用するよりもシード処理にこれを優先しました。
問題は、開発マシンですべてのテストを実行すると、Z テストが最後に実行され、シード データがデータベースに残ることです。テストがビルドサーバーで実行されると、Z テストも最後に実行されますが、データは db に残りません。
SQL Server プロファイラーによると、テーブルの挿入/作成が実行されるため、マシンとビルド サーバーの両方でデータがデータベースに取得されますが、ビルド サーバーでは挿入の直後にいくつかの削除/削除クエリが実行されます。彼らがどこから来たのかはわかりませんでした。
Z テスト アセンブリのみを実行してみましたが、データはデータベースに残ります。したがって、ドロップは何らかの形で他のアセンブリによって引き起こされたに違いありません。しかし、どのように?Visual Studio とビルド サーバーでテストを実行する方法に違いがあるのはなぜですか?
誰もこのようなことに遭遇したことがありますか?