C# 有没有办法将NUnit TestCase属性与可选参数一起使用

C# 有没有办法将NUnit TestCase属性与可选参数一起使用,c#,unit-testing,nunit,optional-parameters,C#,Unit Testing,Nunit,Optional Parameters,我正在尝试运行一些测试用例,但我需要使其中一个参数可选 我尝试了以下方法,但NUnit忽略了测试并打印了以下“忽略:提供的参数数量错误” 是否可以使用可选参数运行测试用例?只需进行2次测试在这种情况下,nunit不支持可选参数: [TestCase("set", Result = "set")] public string MyTest(string optional) { return optional; } [TestCase(Result = "optiona

我正在尝试运行一些测试用例,但我需要使其中一个参数可选

我尝试了以下方法,但NUnit忽略了测试并打印了以下“忽略:提供的参数数量错误”


是否可以使用可选参数运行测试用例?

只需进行2次测试在这种情况下,nunit不支持可选参数:

[TestCase("set", Result = "set")]
public string MyTest(string optional)
{
    return optional;          
}

[TestCase(Result = "optional")]
public string MyTest()
{
    return MyTest("optional");          
}

听起来你想在这里测试两个不同的东西,所以我倾向于使用两个单独的测试

如果出于某种原因,您确实需要或希望在一个测试中使用它,您可以使用
null
或常量作为参数,并添加代码以在测试中处理它。但要小心不要让测试中的逻辑太复杂(理想情况下,测试中不应该有任何逻辑…)


对于NUnit的当前版本,这是不可能的。但我相信这将是一个有意义的增强即将到来的v3,这是目前正在开发中。您可以在.Oops上打开此功能的功能请求,以删除该功能。现在修好了。我的观点是,您可以传递其他指示不应传递任何内容的内容(如使用可选参数时)。这样,您可以在某种程度上伪造可选参数行为。有点像黑客,但应该有用。
[TestCase("set", Result = "set")]
public string MyTest(string optional)
{
    return optional;          
}

[TestCase(Result = "optional")]
public string MyTest()
{
    return MyTest("optional");          
}
const string NO_VALUE = "Just a const to identify a missing param";

[TestCase(null, Result = "optional")] // Either this... 
[TestCase(NO_VALUE, Result = "optional")] // or something like this
[TestCase("set", Result = "set")]
public void MyTest(string optional)
{
    // if(optional == null)  // if you use null
    if(optional == NO_VALUE) // if you prever the constant
    {
        // Do something
    }
    else{
        // Do something else
    }        
}