我尝试在设备单元测试(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属性?
答案 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])
会抛出异常。