2

データ ソースに CSV ファイルを使用するデータ ドリブンの単体テストがあります。私のファイルの列の 1 つは、文字列として扱われることを意図しています。その列の値を日付として解釈できる行を追加するまで、問題なく動作します。これを行うと、前の行のテストが失敗し始めます。列に「日付」があると、列のすべての値が日付として扱われるようです。日付として解析できない値には、DBNull 値が与えられます。これを防ぐ方法はありますか?おそらく、データ ソースの各列をどの型として扱うべきかを指定することでしょうか?

4

1 に答える 1

3

あなたが提供した情報に基づいて、値を二重引用符 (") で囲むことをお勧めします。次に、常にすべてのフィールドを文字列として扱い、コードで適切な解析メソッドを呼び出します。

CSV ファイルで次のことを行います。

input,expected
"1600,1","1600,1"
"1600","1600"

簡単なテスト メソッドで両方の値を読み取ります。入力は Double として解析され、予期されるものは String として扱われます。

[DeploymentItem("UnitTest\\TestData.csv"), 
 DeploymentItem("TestData.csv"), TestMethod(),
       DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV",
                  "|DataDirectory|\\TestData.csv", 
                  "TestData#csv", 
                  DataAccessMethod.Sequential)
 ]
 public void Test()
 {
    double input= System.Double.Parse(TestContext.DataRow["input"].ToString());
    string expected = TestContext.DataRow["expected"].ToString();
    Assert.AreEqual(input, expected);
 }

これは非常に基本的な例であり、推奨されていないことを行っている可能性があります。VS2010 での単体テストの経験は限られているため、この回答の改善を提案してください。

この回答は、小数値を読み取るという私の問題に基づいています。これは、現在実装しているフォーマッタをテストするためのものです。

于 2011-11-07T15:45:41.130 に答える