如何使用CSV数据源控制数据驱动单元测试中的列类型?

时间:2011-03-14 17:38:11

标签: .net unit-testing csv data-driven

我有一个数据驱动的单元测试,它使用CSV文件作为其数据源。我文件中的一列意味着被视为字符串。它工作正常,直到我添加一行,其中该列的值可以解释为日期。当我这样做时,早期行的测试开始失败。看来列中有“日期”使其将列中的所有值视为日期。然后,将无法解析为日期的值赋予DBNull值。 反正有没有阻止这个?也许通过指定数据源中每列应该被视为什么类型?

1 个答案:

答案 0 :(得分:2)

根据您提供的信息,我建议在值周围尝试双打引号(“)。 其次,我总是将所有字段视为String,并在我的代码中调用适当的解析方法。

我在CSV文件中执行以下操作:

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

一个简单的测试方法读取两个值。输入被解析为Double,而expect被视为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中使用单元测试的经验是有限的,所以请随时建议改进这个答案。

这个答案是基于我读取一些小数值的问题。这用于测试我目前正在实现的格式化程序。