XMLファイルを読み込んで解析する必要があるテストがあります。このファイルを毎回テスト実行フォルダーにコピーするにはどうすればよいですか?
XMLファイルは「新しい場合にコピー」に設定され、コンパイルモードは「なし」になります(実際にはコンパイル可能なものではないため)
DeploymentItem
属性 を使用します
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ファイルを提供する場合、「展開を有効にする」オプションをオフにして、mstestが...TestResults\...\out
余分なファイルをコピーしないフォルダー(展開オプションにしない限り)。
TestSettingsのDeployment、Add Folderオプションを使用すると、展開アイテムはすべて一時実行フォルダー(out)に直接(フラット)コピーされるように見えるため、これは、保存されたフォルダー構造にある追加ファイルに依存している場合にも役立ちます(上記の回答は、各アイテムを独自のDeploymentItemとして追加する場合、構造を保持できることを示唆しています)。
私にとっては、Visual Studioで直接テストを正常に実行しました(つまり、構造内の余分なファイルがテストで検出されて使用されました)別の理由でTestSettingsファイルを作成したためです(展開を有効にしていない) TestSettingsファイルを使用するように指定していないため、mstestを実行してテストを実行しました。
Visual StudioでTestSettingsファイルを作成するには、Solutionを右クリックして[新しい項目]を選択し、TestSettingsテンプレートを選択します。 mstest.exeのコマンドプロンプトでTestSettingsファイルを使用するには、オプション[/testsettings:C:\Src\mySolution\myProject\local.testsettings
(またはTeamCityに追加のコマンドラインオプションとして適切なパスを追加します)
Preet回答は、単一のテストのアイテムを展開するために使用されます。ソリューションレベルで実行する場合は、 。testrunconfig settings を使用します。
私にとって最良の解決策は、特に複数のテストで同じデータファイルが必要な場合にテスト設定を使用することです。
最初に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で実行し、「テスト\テスト設定」メニューから「テスト設定ファイルを選択」を使用して、新しいテスト設定を選択します
Mstestを実行し、/ testsettingsパラメーターを使用して、mstestでテスト設定を使用します。
AssemblyInitialize属性を持つメソッドを保持するクラスでDeploymentItemを定義できます。その後、実行するテストに関係なく、ファイルが確実にコピーされます。
残念ながら、DeploymentItem属性は、実行中のテストを含むクラスでのみ実行されます。したがって、同じファイルセットを使用する10のテストクラスがある場合、それらすべてに属性を追加する必要があります。
また、*。testsettingsファイルの変更がVisual Studioで自動的に更新されないこともわかりました。そのため、testsettingsでデプロイメントにファイル/フォルダーを追加した後、ソリューションファイルを再度開き、テストを実行する必要があります。
Visual Studio 2012では、vstest.console.exe(組み込みのテストランナー)は、出力ディレクトリを現在のパスとして実行します。これは、テストで使用するために、「常にコピー」または「新しい場合にコピー」プロパティを使用してソリューションにアイテムを含めるだけでよいことを意味します。一般的なケースでは、DeploymentItem属性は必要ありません。 output/testディレクトリ内のコマンドラインからvstest.console.exeを実行する場合も同様です。
DeploymentItem属性を使用しているときに別のフォルダーが使用される場合があります。詳細については、 here を参照してください。