テストを実行する前に単体テストプロジェクトをビルドすると、テスト出力がTestResultsフォルダーにコピーされ、テストが実行されます。私が抱えている問題は、Debug / binディレクトリ内のすべてのファイルがTestResultsプロジェクトにコピーされるわけではないことです。
Debug / binディレクトリにコピーされたファイルをTestResultsフォルダーにもコピーするにはどうすればよいですか?
テストを実行する前に単体テストプロジェクトをビルドすると、テスト出力がTestResultsフォルダーにコピーされ、テストが実行されます。私が抱えている問題は、Debug / binディレクトリ内のすべてのファイルがTestResultsプロジェクトにコピーされるわけではないことです。
Debug / binディレクトリにコピーされたファイルをTestResultsフォルダーにもコピーするにはどうすればよいですか?
回答:
これを行う標準的な方法は、ファイルに配置項目を指定することです。これには、Visual Studioの[ テスト ]メニューまたは[ ソリューション項目 ]フォルダーの[ テスト実行構成.testrunconfig
の編集 ] 項目からアクセスできます。
以下に示す例のように、デプロイメント属性を指定できます。また、「Content」と「Copy if newer」プロパティを設定する必要があります(後の設定に関するドキュメントはありませんが、機能させるために設定しました)。
[TestMethod]
[DeploymentItem("mytestdata.xml")]
public void UploadTest()
{
}
属性を機能させるにTest -> Edit Test Settings -> Local -> Deployment
は、「展開を有効にする」をオンに[DeploymentItem]
する必要がありました。
ニーズに応じて、3つの答えはすべて正しいです。
.testrunconfig(VS2010の.testsettings)に展開するファイルを追加すると、無関係に実行される無関係なテストの場合でも、それらのファイルがすべてすべてのテスト出力フォルダーにコピーされます。1つのテストを実行すると、.testssettingsのデプロイメントセクションにリストされているすべてのテストデータファイルがテスト出力フォルダーにコピーされます。
私のテストでは、実際のテスト出力XMLと比較するために、予期されるXMLファイルをテスト出力フォルダーにコピーする必要があります。DeploymentItem属性を使用して、実行中のテストに関連するXMLファイルのみをコピーしています。VS2010では、.testsettingsファイルで展開を有効にし(ただし、パスを追加しないで)、DeploymentItemでTestProjectに関連するXMLファイルのパスを参照する必要がありました。
お役に立てれば。
以下は、testsettingsファイルを使用せずに、複数のソリューションに含まれるテストプロジェクトに対してVS2012で機能します。
1)デプロイするファイルとフォルダーをテストプロジェクトディレクトリのフォルダーに配置します。
2)プロジェクトのプロパティで、ビルド後のステップを作成します
xcopy /Y /S /i "$(ProjectDir)<Project_Folder_Name>\*" "$(TargetDir)<Deployment_Folder_Name>"
$(ProjectDir)
および$(TargetDir)
はVSによって解釈されるマクロであり、そのように含める必要があります。
<Project_Folder_Name>
手順1で作成したフォルダの名前です。
<Deployment_Folder_Name>
は、テストファイルが展開されるフォルダの名前であり、複数のテストプロジェクトが同じディレクトリに展開されるときに一意になるように名前を付ける必要があります<Project_Name>_TestInputs
。
共有の場所にあるテストファイルもターゲットディレクトリの展開フォルダーにコピーして、テストのやり取りを制限する必要があります。$(ProjectDir)
マクロに関連するソースパスを指定します。例えば"$(ProjectDir)..\..\Common Files\C1219TDL-2008.xml"
。
3)[DeploymentItem(source, destination)]
デプロイメントファイルを使用する各テストメソッド(ベストプラクティス)またはテストクラス(レイジーまたは急いでの簡単なプラクティス)にプロパティを追加し、以前に使用した相対パスまたはテスト設定ファイルをプロジェクトを更新する最も簡単な方法)。
試験法、source
によって作成されたように、ターゲットディレクトリに試験方法相対で使用されるファイルまたはディレクトリへのパスであるxcopy
とdestination
それが展開ディレクトリに対して作成されるディレクトリへのパスです。そのため、テストはターゲットディレクトリまたはデプロイメントディレクトリのいずれかで一貫して実行されます。宛先パスは、ファイル参照のないソースパスと同じでなければなりません。例: [DeploymentItem("Example_TestInputs\C1219TDL-2008.xml","Example_TestInputs")]
。DeploymentItem
そのファイルまたはディレクトリを使用するすべての方法に含まれるべきです。
クラス上で、source
とdestination
によってターゲットディレクトリに作成されたフォルダの名前xcopy
です。これにより、クラス内のテストが実行されると、フォルダー全体がデプロイメントディレクトリにコピーされます。例:[DeploymentItem("Example_TestInputs","Example_TestInputs")]
4)テストメソッドでは、Visual Studioがその日に配置することを決定した場所に関係なく、ファイルやディレクトリにアクセスできるようになりましたFile.Exists(".\Example_TestInputs\C1219TDL-2008.xml")
。
Visual Studio(そのIDEを使用している場合)内から、ビルド後のイベントコマンドラインを試します。
受け入れられた答えは正しいので、他のほとんどの答えも正しいです。ただし、何年にもわたって、多数のデータファイルがある場合、DeploymentAttribtueとCopy to Outputを使用したVisual StudioユニットテストのDeplomentシステムは扱いにくいことがわかりました。ファイルを元の場所に保持する方が効果的であることがわかりました。
詳細については、こちらの他の回答をご覧ください。 https://stackoverflow.com/a/53004985/2989655
お役に立てれば。