2012-05-21 31 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

相關問題