Чтение тестовых данных NUnit из Excel — как получить доступ к тестовым данным?

Я пытаюсь использовать средство чтения данных 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
    }

Вопрос в том, как мне получить доступ к тестовым данным в моей тестовой процедуре? Как обратиться к значению в столбце "статус" или "давление"?

Nunit находит все строки в моих тестовых данных, потому что он запускает тест 214 раз. Но когда я отлаживаю свой код и хлебаю в T3003_Excel, свойство testData.Count равно нулю. Как и длина коллекции ключей хеш-таблицы testData.Keys. (testData.Keys.Count = 0)

Любые предложения или помощь?


person Markku Rintala    schedule 28.05.2014    source источник


Ответы (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);
}
person Patrick Quirk    schedule 28.05.2014