2016-09-29 152 views
8

我正在开发测试使用Nunit数据驱动测试的方法。我有2个参数的测试方法:路径xlsx文件和工作表名称。 它可以完美运行在Visual Studio当我通过参数TestCase属性,例如,当我要运行3测试用例不得不写这样的事:使用nunit控制台通过测试用例参数

[TestCase(@"pathToFile.xlsx", "TestCase1")] 
[TestCase(@"pathToFile.xlsx", "TestCase2")] 
[TestCase(@"pathToFile.xlsx", "TestCase3")] 
public void performActionsByWorksheet(string excelFilePath, string worksheetName) 
{  
    //test code 
} 

我想运行我的测试案例和传递参数使用Nunit控制台(不要在代码中写入参数)。

是否有可能实现它?

回答

19

如果您使用NUnit 3,你可以使用TestContext.Parameters属性:

[Test] 
public void performActionsByWorksheet() 
{ 
    string excelFilePath = TestContext.Parameters["excelFilePath"]; 
    string worksheetName = TestContext.Parameters["worksheetName"]; 
    TestContext.WriteLine(excelFilePath); 
    TestContext.WriteLine(worksheetName); 
} 

和--params命令行参数:

nunit3-console.exe path/to/your/test.dll --params=excelFilePath=testPath;worksheetName=testName 
+0

非常感谢!它适用于一组参数。如果我想在我的问题中运行更多的测试案例,那么呢? – kotoj

+0

@kotoj,将它们作为分隔字符串传递给一个参数 – Fabio

+0

你能帮我用AutoRun().execute()做这件事。我使用''.Execute(new String [] {“--where = cat = testname”})来运行带有category属性的测试;''现在如何在这里添加'--params'? – Dimple

3

我发现很多测试用例解决方法:使用TestCaseSource
测试代码:

[Test, TestCaseSource("testData")] 
public void performActionsByWorksheet(string excelFilePath, string worksheetName) 
{ 
    Console.WriteLine("excel filePath: {0}", excelFilePath); 
    Console.WriteLine("worksheet Name: {0}", worksheetName); 
} 

从CSV文件获取测试数据:

static object[] testData() 
{ 
    var reader = new StreamReader(File.OpenRead(@"TestCases.csv")); 
    List<object[]> rows = new List<object[]>(); 

    while (!reader.EndOfStream) 
    { 
     var line = reader.ReadLine(); 
     var values = line.Split(','); 
     rows.Add(values); 
    } 

    return rows.ToArray<object[]>();       
} 

,我存储在CSV文件中所有的测试情况下,我想运行(文件路径和工作表名称)。也许不是最好的解决方案,但我实现了我的目标 - 不要在代码中编写参数。