传递表达式<func <type,bool =“”>&gt;作为TestCase

时间:2016-01-26 10:42:44

标签: c# linq unit-testing nunit

有谁知道如何参数化以下内容:

[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)]

但我收到以下错误:

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

我错过了什么?

(我正在使用linq2db和nunit)

2 个答案:

答案 0 :(得分:2)

显然我可以使用NUnits TestCaseSource来传递Funcs。

请参阅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)

答案 1 :(得分:1)

您不能将复杂表达式作为测试参数传递,只支持常量基元类型。