无法传递字符串数组
我想使用NUnit测试传递不同的测试参数。无法传递字符串数组
我可以通过整型数组,没问题,但是当我传递字符串数组时,它不起作用。
[TestCase(new[] { "ACCOUNT", "SOCIAL" })]
public void Get_Test_Result(string[] contactTypes)
{
}
错误3的属性参数必须是常量表达式,属性参数的typeof运算 表达或数组创建表达式 类型... \ ContactControllerTests.cs 78个13单元测试
它当我使用字符串数组作为第二个参数时工作。
那么是什么原因?
[TestCase(0, new[] {"ACCOUNT", "SOCIAL"})]
public void Get_Test_Result(int dummyNumber, string[] contactTypes)
{
}
考虑做如下
[TestCase("ACCOUNT", "SOCIAL")]
public void Test1()
{
}
不知道如果你的测试将类似于我的。但是我用下面的测试
[TestFixture]
public class TestCaseTest
{
[TestCase("ACCOUNT","SOCIAL")]
public void Get_Test_Result(String a, String b)
{
Console.WriteLine("{0},{1}",a,b);
}
}
而结果预期的结果
此外,如果你想要一些参考TestCaseAttribute
一般来说,如果答案包含解释,答案会更有帮助。 – 2015-04-02 04:39:49
没有像自解释代码那样的东西,特别是当你处理像这样的语法怪癖时。 *特别是*当你完全脱离其中一个开放的假设时,并不能解释为什么问题首先出现。 – 2015-04-02 04:50:20
@Saifur错误提供的参数数量 – codebased 2015-04-02 04:53:26
我相信这是一个情况下,超载分辨率&阵列协方差问题。
随着[TestCase(new string[] { "" })]
编译器决定TestCase
构造函数的最佳过载是以params object[]
作为参数。这是因为编译器可以分配string[]
到object[]
,这要归功于数组的协方差,因此这比string[]
到object
赋值(其他构造函数)更具体匹配。
这不会发生与int[]
因为co-variance does not apply to arrays of value types所以编译器被迫使用object
构造函数。
现在,为什么它决定new [] { "ACCOUNT", "SOCIAL" }
不是array creation expression of an attribute parameter type超出了我。
所以可能的解决方案可能是'[TestCase((object)new string [] {“”})]'强制所需的过载... – 2015-04-02 18:23:15
@AlexeiLevenkov:这就是我会做的。但我仍然无法弄清楚为什么编译器在使用string []作为属性构造函数参数时遇到了问题,尽管spec说它是有效的。 – 2015-04-02 19:23:15
您是否尝试明确指定数组类型? '新字符串[] {...}'? – abatishchev 2015-04-02 05:45:12
@abatishchev是的,但它不起作用。 – codebased 2015-04-02 05:59:31
我明白了。游民。你使用的是什么版本的NUnit? – abatishchev 2015-04-02 06:01:03