我尝试使用此处引入的Excel数据阅读器http://fabiouechi.blogspot.fi/2010/07/excel-data-driven-tests-with-nunit.html来读取NUnit测试的数据。
我的测试数据有几列 - 如状态,运行,压力,p_prev,温度 - 以及excel文件中超过200行。
我使用以下代码阅读测试用例。
public static IEnumerable<TestCaseData> TestCaseData_T3003
{
get
{
var testcases = ExcelTestCaseDataReader.New()
.FromFileSystem(@"C:\Tests\Test data.xlsx")
.AddSheet("T3003")
.GetTestCases(delegate(string sheet, DataRow row, int rowNum)
{
var testName = sheet + rowNum;
//var category = Convert.ToString(row["col1"]);
IDictionary testDataArgs = new Hashtable();
var testData = new TestCaseData(testDataArgs).SetName(testName);
return testData;
}
);
foreach (TestCaseData testCaseData in testcases)
{
yield return testCaseData;
}
}
}
public List<TestCaseData> GetTestCases(Func<string, DataRow, int, TestCaseData> testCaseDataCreator)
{
var testDataList = new List<TestCaseData>();
IExcelDataReader excelReader = GetExcelReader(ExcelFile);
excelReader.IsFirstRowAsColumnNames = true;
DataSet result = excelReader.AsDataSet();
foreach (var sheet in Sheets)
{
var sheetTable = result.Tables[sheet];
var i = 0;
foreach (DataRow dr in sheetTable.Rows)
{
testDataList.Add(testCaseDataCreator(sheet, dr, i));
i = i + 1;
}
}
excelReader.Close();
return testDataList;
}
并且使用来自excel的数据的实际测试仍然非常原始。
[Test]
[TestCaseSource("TestCaseData_T3003")]
public void T3003_Excel(IDictionary testData)
{
//do the assertions here
}
问题是,如何在我的测试程序中访问测试数据?如何引用列&#34; status&#34; 或&#34; pressure&#34; 中的值?
Nunit查找测试数据中的所有行,因为它运行测试214次。 但是,当我在T3003_Excel中调试我的代码和面包时,属性testData.Count为零。哈希表testData.Keys的密钥集合的长度也是如此。 (testData.Keys.Count = 0)
有任何建议或帮助吗?
答案 0 :(得分:3)
您只是在测试用例数据中添加空HashTable
;你需要在其中加入一些东西。你的代表应该是这样的:
...
.GetTestCases(delegate(string sheet, DataRow row, int rowNum)
{
var testDataArgs = new Dictionary<string, object>();
foreach (DataColumn column in row.Table.Columns)
{
testDataArgs[column.ColumnName] = row[column];
}
var testName = sheet + rowNum;
return new TestCaseData(testDataArgs).SetName(testName);
}