【问题标题】:Reading NUnit test data from Excel - how to access testdata?从 Excel 中读取 NUnit 测试数据 - 如何访问测试数据?
【发布时间】:2014-05-28 12:59:17
【问题描述】:

我正在尝试使用此处介绍的 Excel 数据阅读器 http://fabiouechi.blogspot.fi/2010/07/excel-data-driven-tests-with-nunit.html 来读取我的 NUnit 测试的数据。

我的测试数据有几列——例如状态、运行、压力、p_prev、温度——以及超过 200 行的 excel 文件。

我正在使用下面的代码来阅读测试用例。

        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
    }

问题是,我如何在我的测试过程中访问测试数据?如何引用列“status”或“pressure”中的值?

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

有什么建议或帮助吗?

【问题讨论】:

    标签: c# excel nunit data-driven-tests


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2017-03-24
      • 2012-12-20
      • 1970-01-01
      • 1970-01-01
      • 2015-03-15
      • 1970-01-01
      • 2018-09-15
      • 2011-05-01
      • 2016-01-11
      相关资源
      最近更新 更多