「外部」設定ファイル(つまり、configSource を使用)、MSTest 単体テスト プロジェクトを使用しますか?
-
02-07-2019 - |
質問
わかりやすくするために、通常、構成の多くを分割します(つまり、app.config と web.config の内容)を別々の .config ファイルに取り出し、「configSource」属性を使用してメインの構成ファイルからそれらを参照します。例えば:
<appSettings configSource="appSettings.config"/>
次に、これをメイン構成ファイルにインラインで配置するのではなく、すべてのキーと値のペアを appSettings.config ファイルに配置します。
<appSettings>
<add key="FirstKey" value="FirstValue"/>
<add key="SecondKey" value="SecondValue"/>
...
</appSettings>
通常、これはアプリケーション自体ではうまく機能しますが、何らかの理由で、これらの外部ファイルの 1 つに保存されている構成セクションから何らかの値を取得する必要がある単体テストを作成しようとすると、問題が発生します。(これらのほとんどは構成システムに依存しているため、「統合テスト」とみなされる可能性が高いことを理解しています。また、「純粋な単体テスト」もありますが、それらは問題ではありません。これらの構成値が正しく取得され、正しい方法で動作に影響を与えることをテストしたいと考えています)。
MSTest が出力をコンパイルして、各テスト実行とは異なる難読化されたフォルダー (皆さんが考えているような「bin」フォルダーではなく) に出力をコピーする方法が原因で、テスト中にこれらの外部ファイルを見つけることができないようです。実行しています。これを機能させるためにビルド後のアクションをいじってみましたが、うまくいきませんでした。実行時にこれらの外部ファイルを正しい出力フォルダーにコピーする方法はありますか?
解決
それを見つけた:
テスト実行構成を編集すると (新しい単体テストを追加するときに「ソリューション項目」ソリューション フォルダーに置かれる .testrunconfig ファイルをダブルクリックします)、テスト実行構成ダイアログが表示されます。そこには「デプロイ」と呼ばれるセクションがあり、ソリューション内の任意の場所からファイルまたはフォルダー全体を指定でき、実行時にコンパイルされたアセンブリとともに正しいフォルダーにコピーできます。
このようにして、構成の大部分を 1 セットの外部 .config ファイルで定義するだけで、各テストの実行時に自動的にコピーされるようになりました。
他のヒント
Visual Studio の外部でテストを実行しようとする場合、テスト実行の構成は少し面倒です。
MSTest を使用したコマンド ライン実行の場合、「クリーン」を維持するのは非常に面倒になります。また、これらはソリューションに対して「グローバル」であるため、外部ファイルはテスト プロジェクトごとにコピーされます。
私ははるかに好きです DeploymentItem
属性。
[TestMethod]
[DeploymentItem(@"test_data.file")]
public void FooTest()
{...}
テストを .testrunconfig ファイルから独立させます。
-
これをconnectionStringに書き込みます。最初の ConnectionString.config は存在しません。
&lt;&quot; connectionStrings configSource =&quot; ConnectionString.config&quot;&gt; &quot;
-
管理者特権でコマンドプロンプト(CMD)を開きます。
- bin / debugフォルダーに ConnectionString.config という名前のシンボリックリンクを作成します。
C:\ Windows \ Systems32&gt; mklink&quot; C:\ Link To Folder \ .... \ ConnectionString.config&quot; &quot; C:\ Users \ Name \ Original Folder \ ..... \ ... \ Secure ConnectionString.config&quot;
最終的に、指定された場所にConnectionString構成ファイルを作成します。正常に動作します。