C# 使用nunit控制台通过测试用例参数

C# 使用nunit控制台通过测试用例参数,c#,nunit,data-driven-tests,nunit-console,C#,Nunit,Data Driven Tests,Nunit Console,我正在使用Nunit和数据驱动测试方法开发测试。我有两个参数的测试方法:xlsx文件的路径和工作表名称。 当我在TestCase属性中传递参数时,它在Visual Studio中工作得非常完美,例如,当我想要运行3个测试用例时,必须编写如下内容: [TestCase(@"pathToFile.xlsx", "TestCase1")] [TestCase(@"pathToFile.xlsx", "TestCase2")] [TestCase(@"pathToFile.xlsx", "TestCas

我正在使用Nunit数据驱动测试方法开发测试。我有两个参数的测试方法: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控制台运行测试用例并传递参数(不要在代码中编写参数)


有可能实现吗?

如果使用NUnit 3,则可以使用TestContext。参数属性:

[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

我使用
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[]>();                        
}
静态对象[]testData()
{
var reader=newstreamreader(File.OpenRead(@“TestCases.csv”);
列表行=新列表();
而(!reader.EndOfStream)
{
var line=reader.ReadLine();
var值=行分割(',');
行。添加(值);
}
返回rows.ToArray();
}

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

非常感谢!它适用于1组参数。如果我想像我的问题中那样运行更多的测试用例呢?@kotoj,将它们作为带分隔符的字符串传递到一个参数中,你能帮助我使用AutoRun().Execute()执行吗。我使用category属性
.Execute运行测试(新字符串[]{--where=cat=testname“})
现在如何在此中添加
--params
?从3.10开始,您应该切换到--testparam:Key=Value,而不是--params。这是为了避免半列的问题,例如连接字符串中的问题。