回答:
using System;
using System.IO;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using CarMaker;
namespace DeploymentTest
{
[TestClass]
public class UnitTest1
{
[TestMethod()]
[DeploymentItem("testFile1.xml")]
public void ConstructorTest()
{
string file = "testFile1.xml";
Assert.IsTrue(File.Exists(file), "deployment failed: " + file +
" did not get deployed");
}
}
}
ソリューションのTestSettingsファイルを提供する場合は、[展開を有効にする]オプションをオフにして...TestResults\...\out
、余分なファイルをコピーしないフォルダーからmstestを実行しないようにすることができます(展開オプションにしない限り)。 。
TestSettingsの[Deployment、Add Folder]オプションを使用した場合、Deploymentアイテムはすべて一時実行フォルダー(out)に直接(フラット)にコピーされるように見えるため、これは保存フォルダー構造にある追加ファイルに依存している場合にも役立ちます。上記の回答は、各アイテムを独自のDeploymentItemとして追加する場合、構造を維持できることを示唆しています。
私にとっては、Visual Studioでテストを直接実行しても問題なく動作しました(つまり、構造内の余分なファイルが見つかり、テストで使用されていたため)。 TestSettingsファイルを使用するように指定していないため、mstestを実行してテストを実行しました。
Visual StudioでTestSettingsファイルを作成するには、ソリューションを右クリックして[ 新しい項目] を選択し、TestSettingsテンプレートを選択します。mstest.exeのコマンドプロンプトでTestSettingsファイルを使用するには、オプションを追加します/testsettings:C:\Src\mySolution\myProject\local.testsettings
(または、TeamCityに追加のコマンドラインオプションとして適切なパスを追加します)。
特に複数のテストで同じデータファイルが必要な場合は、テスト設定を使用するのが最善の解決策です。
最初にtestsettingsファイルを作成し、必要な展開項目(ファイルまたはフォルダー名)を追加します。
<TestSettings name="Local" id="00ebe0c6-7b64-49c0-80a5-09796270f111" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
<Description>These are default test settings for a local test run.</Description>
<Deployment>
<DeploymentItem filename="Folder1\TestScripts\test.xml" outputDirectory="TestScripts"/>
<DeploymentItem filename="Folder2\TestData\" outputDirectory="TestData"/>
</Deployment>
<...../>
Visual Studioで実行し、[Test \ Test Settings]メニューから[select Test Settings File]を使用して新しいテスト設定を選択します
mstestを実行し、/ testsettingsパラメーターを使用して、mstestにテスト設定を使用させます。
AssemblyInitialize属性を持つメソッドを保持するクラスでDeploymentItemを定義できます。そうすれば、実行するテストに関係なく、ファイルが確実にコピーされます。
残念ながら、DeploymentItem属性は、実行中のテストを含むクラスでのみ実行されます。したがって、同じファイルセットを使用する10個のテストクラスがある場合は、それらすべてに属性を追加する必要があります。
* .testsettingsファイルの変更がVisual Studioで自動的に更新されないこともわかりました。したがって、testsettingsのデプロイメントにファイル/フォルダーを追加した後、ソリューションファイルを再度開いてテストを実行する必要があります。
Visual Studio 2012では、vstest.console.exe(組み込みテストランナー)は、出力パスを現在のパスとして実行します。これは、テストで使用するために、「常にコピー」または「新しい場合はコピー」プロパティを使用して、ソリューションに項目を含めるだけでよいことを意味します。一般的なケースではDeploymentItem属性は必要ありません。output / testディレクトリ内のコマンドラインからvstest.console.exeを実行する場合も同様です。
別のフォルダーが使用される場合があります。その1つは、DeploymentItem属性を使用している場合です。詳細については、こちらをご覧ください。