2012-05-21 29 views
3

我试图使用NUnit和传递一个字符串参数TestCase的属性,但我得到的属性参数“的属性参数必须是常量表达式,typeof运算的表达式或数组创建表达式一个属性参数类型”将字符串传递通过调用方法

这是一个简化的版本,但MyStatic是返回建立正则表达式串的呼叫,因此,在每个MyStatic方法被称为附加到一个StringBuilder并且具有隐式转换为字符串。

我想,因为如果我创建单独的单元测试,我会去反对DRY原则,以保持此方法。

[TestCase("","/123",MyStatic.DoThis().And().GetString("ABC"), "id","123")] 
    public void MyMehthod(string Root, string Path, string Route, string Param, string Expected) 
    { 
    var result = SetupRouteResponse(Root, Path, Route, "MatchIt"); 

    Assert.AreEqual(Expected, (string)result.Context.Parameters[Param]); 
    } 

回答

9

尝试使用TestCaseSource这些类型的参数:从文档http://www.nunit.org/index.php?p=testCaseSource&r=2.5.9

例如:

[Test, TestCaseSource("DivideCases")] 
public void DivideTest(int n, int d, int q) 
{ 
    Assert.AreEqual(q, n/d); 
} 

static object[] DivideCases = 
{ 
    new object[] { 12, 3, 4 }, 
    new object[] { 12, 2, 6 }, 
    new object[] { 12, 4, 3 } 
}; 

你的情况:

[Test, TestCaseSource("MyCaseSource")] 
public void MyMehthod(string Root, string Path, string Route, string Param, string Expected) 
{ 
    var result = SetupRouteResponse(Root, Path, Route, "MatchIt"); 

    Assert.AreEqual(Expected, (string)result.Context.Parameters[Param]); 
} 

static object[] MyCaseSource= 
{ 
    new object[] { "","/123",MyStatic.DoThis().And().GetString("ABC"), "id","123" }, 
}; 
+0

你是一个传奇!谢谢! – Jon

+0

欢迎您:-) – eyossi

相关问题