C#IEnumerable查询

时间:2013-12-09 16:28:35

标签: c# nunit

我对此c#代码有疑问。我可以使用selenium来跟踪最后一部分,它将数据输入到文本字段中。但是我在理解这个函数如何工作私有IEnumerable GetXlData()以及如何通过 EnterData(字符串firstName,字符串lastName)这个测试来处理valus时遇到了问题。

我可以遵循data1和data2保存第一个和第二个列的值但是如何返回并由 EnterData(字符串firstName,字符串lastName)测试使用。

namespace XYZ
{
    [TestFixture]
    public class readXl
    {
        ReadXLS xl = new ReadXLS("TestData.xls", "Sheet1");

        private IEnumerable<string[]> GetXlData()
        {
            foreach (ExcelData e in xl.TestData)
            {
                string data1 = e["firstName"];
                string data2 = e["lastName"];

                yield return new[] { data1, data2};
            }
        }

        [Test, TestCaseSource("GetXlData")]
        public void EnterData(string firstName, string lastName)
        {
            driver.FindElement(By.Name("FirstName")).SendKeys(firstName);
            driver.FindElement(By.Name("LastName")).SendKeys(lastName);
        }
    }
}

2 个答案:

答案 0 :(得分:1)

请参阅TestCaseSource的文档。 NUnit基本上是这样做的:

foreach (var x in GetXlData())
{
    EnterData(x[0], x[1]);
}

答案 1 :(得分:0)

NUnit中的TestCaseSource属性用于所谓的数据驱动测试。该机制的工作原理如下:

  • 它的输入(即作为方法名称赋予属性的内容)必须是一个枚举器方法,在您的情况下返回对象(string[],但它也可以是无类型的object)。 此对象必须与装饰测试方法(Enterdata())的签名匹配。
  • 然后,当枚举器方法返回值时,装饰测试方法连续执行多次,每次都使用枚举器方法提供的值(因此这些方法也称为“数据工厂”)。 LI>

这种数据驱动的测试对于将一堆不同的数据抛弃到单个算法非常有用,而无需一次又一次地编写相同的测试代码。

相关问题