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