使用nunit控制台传递测试用例参数

时间:2016-09-29 11:13:42

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

我正在使用 Nunit 数据驱动测试方法开发测试。我有2个参数的测试方法:xlsx文件的路径和工作表名称。 当我在TestCase属性中传递参数时,它在Visual Studio中工作得很完美,例如,当我想运行3个测试用例时,必须编写如下内容:

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

我想运行我的测试用例并使用 Nunit Console 传递参数(不要在代码中写入参数)。

有可能实现吗?

2 个答案:

答案 0 :(得分:30)

如果您使用的是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

答案 1 :(得分: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文件中存储了我想要运行的所有测试用例(文件路径和工作表名称)。也许不是最好的解决方案,但我实现了我的目标 - 不在代码中编写参数。