有谁知道如何参数化以下内容:
[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)
答案 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)
您不能将复杂表达式作为测试参数传递,只支持常量基元类型。