2016-01-26 20 views
2

有誰知道我怎麼能參數如下:通行證表達<Func鍵<Type, bool>>作爲測試用例

[Test] 
void SelectTest(Expression<Func<MyType, bool>> where) 
{ 
    try 
    { 
     using (var db = new DataConnection("MyData")) 
     { 
      where = e => e.Status == Status.New; 

      var data = db.GetTable<MyType>() 
      .(where.Compile()) 
      .Select(e => e); 

      Assert.IsNotEmpty(data); 
     } 
    } 
    catch (Exception) 
    { 
     Assert.False(true); 
    } 
} 

我嘗試添加一個測試用例是這樣的:

[TestCase(e => e.Status == Status.New)] 

但我發現了以下錯誤:

表達式不能包含匿名方法或lambda表達式。

我缺少什麼?

(我使用linq2db和NUnit)

回答

0

您無法通過複雜的表達式爲試驗參數,唯一不變的原始類型的支持。

+0

這就是我想......我想我會去概括,寫查詢具體的測試,那麼.. – grmbl

+0

你有支持它的來源嗎? – grmbl

2

顯然我可以使用NUnits TestCaseSource來傳遞函數。

Pass lambda to parameterized NUnit test

我的解決方案:

public class SelectCollection 
{ 
    public static IEnumerable<Expression<Func<Evaluation, bool>>> Evaluation 
    { 
     get 
     { 
      yield return (e) => e.Status == Status.New; 
      yield return (e) => e.Id == 0; 
     } 
    } 
} 

用作:

[Test] 
[TestCaseSource(typeof(SelectCollection), "Evaluation")] 
public void SelectTest(Expression<Func<Evaluation, bool>> where) 
+0

是的,你可以使用測試源,但是你能立即看到測試變得多麼難讀嗎?其他開發者維護的機會是多少? –

+0

我同意但是我是唯一一個維護測試的人。事實上,我是唯一一個進行單元/集成測試的人。 – grmbl

相關問題