Visual Studio 2019(以下VS2019)以前のバージョンで作成したデータベースの単体テストプロジェクト*1をVisual Studio 2022(以下、VS2022)で開いてテスト実行すると、テストが正しく実行できない事象に遭遇しました。 その回避策についてのメモ。
※1年以上前に遭遇してメモしたのだけど、下書きのまま忘れていたので最新の環境で再確認した上で公開しておきます。
環境
今回検証たVS2019とVS2022の環境は以下の通り:
- Visual Studio 2019 - Version 16.11.51
- SQL Server Data Tools - 16.0.62205.05200
- Visual Studio 2022 - Version 17.14.16
- SQL Server Data Tools - 17.14.26.0
事前準備
VS2019で新規にデータベースプロジェクトおよびデータベースの単体テストを作成しておきます。
- データベースプロジェクトを作成
- スカラ値関数を一つ追加
- 作成したスカラ値関数の単体テストを含む単体テストプロジェクトを作成
- 単体テストを実行してグリーンであることを確認
VS2022で実行(テスト失敗)
前項で作成した、VS2019で正常に動作する単体テストをVS2022で開いて実行するとテスト失敗になります。
いくつか問題があり、対処していくにしたがって以下の例外が発生します(詳細は後述)。
Assembly Initialization method DbTestProject.SqlDatabaseSetup.InitializeAssembly threw exception. System.IO.FileNotFoundException: System.IO.FileNotFoundException: ファイルまたはアセンブリ 'Microsoft.Data.SqlClient, Version=5.0.0.0, Culture=neutral, PublicKeyToken=23ec7fc2d6eaa4a5'、またはその依存関係の 1 つが読み込めませんでした。 指定されたファイルが見つかりません。
Initialization method DbTestProject.MyFunc01Test.TestInitialize threw exception. System.ArgumentException: System.ArgumentException: キーワードはサポートされていません : 'multiple active result sets'.
Initialization method DbTestProject.MyFunc01Test.TestInitialize threw exception. System.ArgumentException: System.ArgumentException: キーワードはサポートされていません : 'trust server certificate'.
対処
VS2022で同様のDBプロジェクトを新規に作成した場合と比較しながら、以下のように対処したところ動作するようになりました。
1. Microsoft.Data.SqlClient をNuGetでインストール
VS2022(SQL Server Data Tools 17.14.26.0)では、明示的に Microsoft.Data.SqlClient を参照する必要がある模様。
NuGetで Microsoft.Data.SqlClient とその依存関係をインストールしてやることで解消する。
今回は現時点での最新 6.1.1 をインストールしました。
2. app.config上の接続文字列を修正
単体テストプロジェクトの app.configを開き、ExecutionContext および PrivilegedContext の接続文字列から以下の記述を削除する。
MultipleActiveResultSets=FalseTrustServerCertificate=False
結果
以上の対応で、VS2022でもDB単体テストが実行できるようになりました。

*1:SSDT : SQL Server Data Toolsに含まれるデータベース単体テストのこと
