【问题标题】:c# an attribute argument must be a constant expressionc# 属性参数必须是常量表达式
【发布时间】:2014-11-13 06:53:45
【问题描述】:

为什么我下面的字符串数组给我一个错误,他们不是都是字符串吗??? "属性参数必须是属性参数类型的常量表达式、typeof表达式或数组创建表达式"

[Test]
[TestCase(new string[]{"01","02","03","04","05","06","07","08","09","10"},TestName="Checking10WOs")]
public void Test(String[] recordNumber)
{
     //something..
} 

【问题讨论】:

  • new 创建的任何东西都不能是常数,对吧?
  • 错误消息似乎很容易解释。它说您不能在属性中使用数组创建;这就是你正在做的事情。
  • patrickdesjardins.com/blog/… 甚至更好地给出了真实的解释和示例.. 下次对确切的错误消息进行谷歌搜索..您可能会惊讶于结果会产生什么

标签: c# visual-studio visual-studio-2012 testing nunit


【解决方案1】:

这不回答问题的标题,但它解决了您的具体问题。

您可能想使用TestCaseSource,它允许您将多个测试用例场景传递到同一个测试机制中,您可以将其用作您喜欢的复杂结构。

    [Test]
    [TestCaseSource("TestCaseSourceData")]
    public void Test(String[] recordNumber, string testName)
    {
        //something..
    }

    public static IEnumerable<TestCaseData> TestCaseSourceData()
    {
        yield return new TestCaseData(new string[] {"01", "02", "03", "04", "05", "06", "07", "08", "09", "10"}, "Checking10WOs");
    }

会发现第一个参数是recordNumber,第二个是testName

请看下面的截图。

希望这可以为您节省一些时间。

【讨论】:

    【解决方案2】:

    字符串都是常量,但它们所在的数组不是。试试这个:

    [Test]
    [TestCase("01","02","03","04","05","06","07","08","09","10", TestName="Checking10WOs")]
    public void Test(String recordNumber)
    {
         //something..
    } 
    

    这是有效的,因为TestCaseAttribute 接受它的案例作为params 列表。

    【讨论】:

    • 谢谢,它解决了错误,但是当我在 Nunit 上执行测试时,它给了我错误“参数的数量不匹配”。我能够使用 [TestCase(3, new String[]{"01","02","03","04","05","06","07","08"," 09","10"}, TestName="Checking10WOs")] public void SwitchingLevelsFromWOLevel(int a, String[] recordNumber) 我只是传递了一个无用的参数并且它起作用了。不知道为什么
    • @GucciProgrammer 查看我的编辑,您的测试参数必须是单个 string。奇怪的是它确实有效,但您将使用一组字符串运行一个测试。我以为您想使用单个字符串参数运行该测试 10 次。
    猜你喜欢
    • 2013-02-09
    • 1970-01-01
    • 2017-02-24
    • 2016-01-05
    • 2011-12-10
    • 2014-11-09
    相关资源
    最近更新 更多