从Excel中读取NUnittesting数据 – 如何访问testing数据?

我试图使用这里介绍的Excel数据阅读器http://fabiouechi.blogspot.fi/2010/07/excel-data-driven-tests-with-nunit.html来读取我NUnittesting的数据。

我的testing数据有几列 – 如状态,运行,压力,p_prev,温度 – 在excel文件中超过200行。

我正在使用下面的代码来读取testing用例。

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数据的实际testing仍然非常原始。

  [Test] [TestCaseSource("TestCaseData_T3003")] public void T3003_Excel(IDictionary testData) { //do the assertions here } 

问题是,如何在我的testing程序中访问testing数据? 我如何参考“状态”“压力”列中的值?

Nunit查找我testing数据中的所有行,因为它运行了214次testing。 但是,当我在T3003_Excel中debugging我的代码和面包时,属性testData.Count为零。 那么哈希表testData.Keys的关键集合的长度也是如此。 (testData.Keys.Count = 0)

任何build议或帮助?

你只是在testing用例数据中添加一个空的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); }