单元测试方法的DataSource属性

时间:2014-03-05 09:22:17

标签: unit-testing visual-studio-2008 compact-framework datasource mstest

我尝试在设备单元测试(WinCE / Pocket PC2003仿真器)中使用CSV数据源

我在数据连接字符串属性中使用向导添加了源代码:

using Microsoft.VisualStudio.TestTools.UnitTesting;
....
[TestMethod()]
[DeploymentItem("Options.txt")]
[DeploymentItem("Options_1.txt")]
[DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", "C:\\...\\Tests\\Data\\LoadSettingsTest.csv", "LoadSettingsTest#csv", DataAccessMethod.Sequential)]
public void LoadSettingsTest()
{
  ...
}

我有以下编译错误:

  

错误1找不到类型或命名空间名称“DataSource”   (您是否缺少using指令或程序集引用?)

     

错误2类型或命名空间名称'DataSourceAttribute'不能   发现(您是否缺少using指令或程序集引用?)

什么? DataSource定义在哪里?设备单元测试中是否支持数据DataSource属性?

2 个答案:

答案 0 :(得分:3)

设备单元测试框架不支持

DataSource ,请参阅Unit Testing Framework (Devices).

答案 1 :(得分:2)

您似乎正在尝试将逗号分隔值(CSV)文件用作数据源。

您应该首先将CSV数据转换为数据控制所熟悉的内容。

以下是一个例子:

private const string FIELD_SEP = "\t";
private const string LINE_BREAK = "\r\n";
private const int ONE_KB = 1024;

private System.Data.DataTable GenerateData(string csvDataFile) {
  var sb = new System.Text.StringBuilder();
  using (var file = File.Open(csvDataFile, FileMode.Open, FileAccess.Read)) {
    byte[] buffer = new byte[ONE_KB];
    int len = file.Read(buffer, 0, ONE_KB);
    while (-1 < len) {
      string oneK = Encoding.UTF8.GetString(buffer, 0, len);
      sb.Append(oneK);
      len = file.Read(buffer, 0, ONE_KB);
    }
  }
  var table = new System.Data.DataTable();
  var col1 = table.Columns.Add("ID", typeof(int));
  var col2 = table.Columns.Add("Name", typeof(string));
  var col3 = table.Columns.Add("Date", typeof(DateTime));
  var col4 = table.Columns.Add("Cost", typeof(decimal));
  var lines = sb.ToString().Split(LINE_BREAK.ToArray());
  foreach (var line in lines) {
    System.Data.DataRow row = table.NewRow();
    var fields = line.Split(FIELD_SEP.ToArray());
    row[col1] = int.Parse(fields[0]);
    row[col2] = fields[1];
    row[col3] = DateTime.Parse(fields[2]);
    row[col4] = decimal.Parse(fields[3]);
    table.Rows.Add(row);
  }
  return table;
}

当然,我不知道您尝试从此CSV文件中提取哪种数据,并且没有错误检查。如果 field [3] 是空字符串,decimal.Parse(field[3])会抛出异常。