次の方法で共有


方法: テスト用のファイルを配置する

 

発行: 2016年7月

テストを実行する場合、そのテストとアプリケーションは、自身が参照する他のアセンブリと共に、実行できる場所にコピーしておく必要があります。 テストには、通常、テスト データ、構成ファイル、データベース、明示的に読み込まれたアセンブリなどの追加のファイルも必要です。 この追加のファイルをテストで使用できるようにするには、ファイルが配置されるように指定する必要があります。

テストが実行される場所

Visual Studio では、複数の場所でテストを実行できます。

ローカル テスト用にテスト ファイルを配置する方法

最適な方法を次に示します。

  1. ビルド プロセスの一環として、ファイルをビルド ターゲット ディレクトリにコピーします。

    • そのファイルが 1 つのテスト プロジェクトに固有の場合は、Visual Studio のテスト プロジェクトにコンテンツ ファイルとして追加します。 そのファイルをソリューション エクスプローラーで選択し、[列コピーの出力] プロパティを [新しい場合はコピーする] に設定します。

    • それ以外の場合は、ビルド出力ディレクトリにファイルをコピーするように、ビルド後のタスクを定義します。 次に例を示します。

      xcopy /Y /S "$(SolutionDir)SharedFiles\*" "$(TargetDir)"
      

      テスト プロジェクトのプロジェクト プロパティを開きます。 C# プロジェクトでは、[ビルド イベント] ページを開きます。 Visual Basic プロジェクトでは、[コンパイル] ページを開き、[ビルド イベント] を選択します。 コピー コマンドを "ビルド後のイベント" フィールドに追加します。

  2. テスト メソッドまたはテスト クラスで DeploymentItemAttribute を使用して、ビルド出力ディレクトリから配置ディレクトリにコピーする必要があるファイルとフォルダーを指定します。

    [TestClass]
    class TestClass1
    {
      [TestMethod]
      [DeploymentItem("source", "targetFolder")]
      public void Test1()
      {
        string testData = System.IO.File.ReadAllText(@"targetFolder\source");
        ...
    } }
    
    <TestClass()> _
    Public Class UnitTest1
        <TestMethod()> _
        <DeploymentItem("source", "targetFolder")> _
        Sub TestMethod1()
            Dim testData As String = _
                System.IO.File.ReadAllText(@"targetFolder\source")
        ...
        End Sub
    End Class
    
    • source は、コピーするファイルまたはディレクトリです。 絶対パス、またはビルド出力ディレクトリを基準とする相対パスを使用できます。

    • targetFolder は省略可能です。 これはソース ファイルまたはディレクトリの内容がコピーされるディレクトリです。 絶対パス、または配置ディレクトリを基準とする相対パスを使用できます。 既定値は "." で、これは配置ディレクトリです。

      注意

      targetFolder は必ずディレクトリです。ファイル パスではありません。DeploymentItem を使用してファイル名を変更することはできません。

    属性は必要な数だけ何度でも使用でき、テスト メソッドまたはテスト クラスに適用できます。

    実行する一連のテストを選択すると、テストの実行が開始する前に、DeploymentItem 属性で指定されたすべての項目がコピーされます。

  3. ビルド出力ディレクトリで単体テストを直接実行することを検討してください。これにより、テストがより迅速に実行されます。 これは、テストをチェックインした後に、ビルド サーバーで特に役立ちます。

    これを行うには、*.runsettings ファイルをソリューションに追加し、<DeploymentEnabled>False</DeploymentEnabled> を挿入して、[テストの設定] メニューの [テスト] でファイルを選択します。 DeploymentItemAttribute がまったく使用されていない任意のテストの実行で、同じ結果になります。

    ただし、*.testsettings ファイルを使用している場合は、配置フォルダーを必ず使用する必要があります。このファイルは、Web テストとロード テスト、コード化された UI テスト、およびアプリケーションをリモート コンピューターに配置するテストに必要です。

*.runsettings ファイルとは?

名前は任意で、ファイル名の拡張子が '.runsettings' のファイルです。 これは、何らの目的で単体テストを構成するときに使用します。 作成する場合は、.runsettings ファイルを使用して単体テストを構成する から例をコピーします。 コピーした内容をソリューション フォルダーに配置し、[テスト] > [テストの設定] メニューを使用してアクティブにします。

*.testsettings ファイルを使用するタイミング

*.testsettings ファイル (名前は任意で、ファイル名の拡張子が '.testsettings' のファイル) は、*.runsettings の代わりに以前使用していたものです。 作成するには、[テスト] > [テストの設定] メニュー項目を使用します。 ファイルをソリューション フォルダーに保存し、[テスト] > [テストの設定] メニューを使用してアクティブにします。

可能な場合は、*.testsettings ファイルを使用しないでください。テストの実行が遅くなります。また、およびサードパーティのテスト フレームワークと一緒に使用することはできません。 簡単な単体テストについては、このファイルは必要ありません。 ただし、次の場合には必要になります。

*.testsettings ファイルを使用すると、アプリケーションとテスト アセンブリが必ず配置フォルダーにコピーされます。

.testsettings エディターの [配置] ページでデータ ファイルとディレクトリを指定できます。 そのファイルとディレクトリは、各テストの実行前に配置フォルダーにコピーされます。 このページで指定された項目のパスは、ソリューション ディレクトリを基準とした相対パスで、アプリケーションおよびテスト アセンブリと共に配置フォルダーに配置されます。

絶対パスを使用する必要がある場合、または別のターゲット ディレクトリを指定する必要がある場合は、XML エディターで .testsettings ファイルを開き、次のようなコードを挿入します。

<Deployment>
  <DeploymentItem filename="C:\MyTestData\TestData.mdb"
        outputDirectory="D:\TestDB\" />
</Deployment>

outputDirectory は絶対パス、または配置ディレクトリを基準とする相対パスです。

個別の配置フォルダーを使用するタイミング

Visual Studio を使用してテストを実行すると、配置フォルダーは、ソリューション フォルダーの TestResults に作成されます。

テストの実行のテスト メソッドまたはテスト クラスのいずれかに DeploymentItem 属性がある場合、または *.testsettings ファイルを使用する場合は、別の配置フォルダーが使用されます。

配置フォルダーを使用すると、テストが実行される前に、次のファイルとフォルダーがその配置フォルダーにコピーされます。

  • テスト アセンブリ ファイル

  • すべての依存アセンブリ

  • DeploymentItemAttribute を使用して、または *.testsettings ファイルで、明示的に指定したディレクトリとファイル

テストのローカル配置フォルダー

ローカル テスト実行用の配置フォルダー

ファイルが配置されるタイミングとシーケンス

テストの実行では、配置するすべてのファイルがテストの開始前にコピーされます。 テストの実行は、1 つのコマンドまたはスケジュールされたイベントによって開始されたテストのバッチです。 つまり、特定のテスト メソッドに対して配置されるデータ ファイルを指定すると、同じ実行のすべてのテストでも使用できるようになります。

次の項目が、表示されている順序でコピーされます。 後でコピーされる項目は、以前にコピーされた項目で同じ名前のものが存在する場合、その項目を上書きします。

  1. DeploymentItemAttribute を使用して指定される項目

  2. 依存関係。 アプリケーション構成ファイルや依存アセンブリの依存関係など。

  3. *.testsettings ファイルで指定された項目 (ファイルを使用している場合)。

  4. インストルメント化されたバイナリ。 コード カバレッジまたは IntelliTrace を有効にするためにインストルメント化されたアセンブリなど。

    埋め込みインストルメンテーションを使用している場合、バイナリは最初にインストルメント化され、次に配置ディレクトリにコピーされます。それ以外の場合は、最初にコピーされ、次にインストルメント化されます。 埋め込みインストルメンテーションは、ローカルで実行されるテストの既定の設定です。

  5. テストを構成するファイルまたは複数のファイル。 この中には、単体テストのテスト アセンブリ、手動テストのテキスト ファイルや .mht ファイル、汎用テストなどその他の種類のテストのその他の種類のファイルなどが含まれます。

TestResults ディレクトリの内容

  • テスト実行フォルダー。 TestResults には、開始されたテスト実行ごとに 1 つのフォルダーが含まれます。 名前には、作成時刻が含まれています。

    *.testsettings でセットアップおよび後処理用のスクリプトを指定した場合、そのスクリプトはテスト実行フォルダーに格納されます。

  • Out。 各テスト実行フォルダーには、Out というフォルダーが含まれます。 Out フォルダーは実際の配置フォルダーで、テストの実行が開始するときに、アセンブリおよびその他の配置のファイルがコピーされます。

  • In。 In フォルダーには、コード カバレッジの結果とその他の特定のテスト結果が格納されます。

参照

DeploymentItemAttribute
Visual Studio のテストにおけるテスト設定の指定
アセンブリのインストルメント化と再署名