【VisualStudio】【MS-Test】単体試験で外部ファイル(CSVなど)からデータを取得する

■ 概要

 * 全網羅するのに凄く便利。
 * 文言を出力する機能のテストによさそう。
 * CSVだけではなく、XMLやDBデータもある

■ 手順

 [1] VSの[テスト]-[ウィンドウ]-[テストリストエディタ]を選択
 [2] 該当のテストの行を右クリックして[プロパティ]を選択
 [3] [データ接続文字列]を選択
 [4] CSV ファイルを選択して [次へ]ボタンをクリック
 [5] データのプレビュー画面で内容を確認し、[完了]ボタンをクリック

  => 単体テストメソッドにDataSourceAttribute属性が付与される(下記の「単体試験」を参照のこと)

■ 単体試験

// TestContextは自動生成
private TestContext m_testContext;
public TestContext TestContext
{
    get { return m_testContext; }
    set { m_testContext = value; }
}

// 途中略

/// <summary>
///GetName のテスト
///</summary>
[DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", "|DataDirectory|\\Sample.csv", "TestData#csv", DataAccessMethod.Sequential), DeploymentItem("TestProject1.Results\\Sample.csv"), TestMethod()]
public void GetNameTest()
{

    string id = this.TestContext.DataRow["ID"].ToString();
    string expected = this.TestContext.DataRow["Name"].ToString();
    string actual = SampleClass.GetName(id);
    Assert.AreEqual(expected, actual);
}

イメージ : テスト対象クラス・メソッド

public class SampleClass
{
   public static string GetName(string id)
   {
       // 実際の実装(省略)
   }
}

サンプル・CSVファイル(Sample.csv

* 1行目にヘッダー部を、2行目以降にデータ部になる
ID,Name
1,"Mike"
2,"Tom"
3,"David"

■ 使用上の注意

 * CSVファイルは、「UTF-8で、BOMなし」のファイルであること!


関連記事

MS-Test

VSの単体テストのあれこれ
https://blogs.yahoo.co.jp/dk521123/18458247.html
ファイルを使う機能の単体試験について
https://blogs.yahoo.co.jp/dk521123/31532337.html
private に関するテスト
https://blogs.yahoo.co.jp/dk521123/38022249.html