【MS-Test】ファイルを使う機能の単体試験について

■ やりたいこと

 引数にファイルパスを受け取って、そのファイルパスから設定ファイルを読み込んで、
処理を行うメソッドの単体試験を作成した時に、テストで使用するファイルをテストのパターンで変えたい。

■ 問題点

http://gushwell.ldblog.jp/archives/50742513.html
にも記載されているが、VS のテスト実行環境は、テストを実行する度に、TestResultディレクトリ配下に、
新たなフォルダが作成され、そこでテストが行われるため、debug\binなどにファイルを置いても、利用できない。

■ 記事概要

 VSの「テストの実行構成の編集」と「this.TestContext.TestDeploymentDir」を使って、
上記「やりたいこと」を実現する

■ 補足

 例えば「ビルドイベント前でファイルをコピー」「DeploymentItem」などを使ってもできると思うが
一番簡単だと思った方法を記録する(もっといい方法があれば、別途記載したい)

■ 手順

構成例

TestProject
 |
 +--【テストプログラム】.cs
 |
 +-- Csv(配下のファイルをテストで使いたい)
      |
      +-- test1
      |    |
      |    +-- test.csv
      |
      +-- test2
      |    |
      |    +-- test.csv
      +-- test3
      |    |
      |    +-- test.csv
     ・・・

準備

 [1] [テスト]-[テストの実行構成の編集]-[ローカルテストの実行]を選択
 [2] [配置」-[ディレクトリの追加]or[ファイルの追加]でテストに使うフォルダ・ファイルを選択して追加する
   (例で言うと[配置」-[ディレクトリの追加]で「Csv」を選択し、追加)
 [3] [閉じる]を選択

テストファイル

 * 「this.TestContext.TestDeploymentDir」を組み合わせて対象ファイルのパスを取得する
 (以下は、上記の例でのテストのソースのサンプルである)
サンプル
/// <summary>
/// ReadCsvFile のテスト
/// </summary>
[TestMethod()]
public void ReadCsvFileTest()
{
      string filePath = Path.Combine(this.TestContext.TestDeploymentDir, @"test1\test.csv");
      // ...
}

関連記事

MS-Test

VSの単体テストのあれこれ
https://blogs.yahoo.co.jp/dk521123/18458247.html
単体試験で外部ファイル(CSVなど)からデータを取得する
https://blogs.yahoo.co.jp/dk521123/31885401.html
private に関するテスト
https://blogs.yahoo.co.jp/dk521123/38022249.html