我有一个公开 IQueryable 的存储库和一个处理特定查询的服务,这里有一些使用 DbFunctions 的方法。为了可测试,我创建了一个带有静态元素列表的假存储库并将其注入到服务中。问题是,由于我的服务查询列表并且不使用数据库,因此我收到错误“只能从 LINQ to Entities 调用此函数。”。
有没有比创建假 DbFunctions 和 QueryProvider 更简单的测试方法?
提前致谢
我尝试实现 dateDiff 函数,它对我有用
但我们应该认为在这种情况下我们测试不同的功能
我们正在测试不是真实的行为
private class MySqlFunctions
{
[DbFunction("SqlServer", "DATEDIFF")]//EF will use this function
public int? DateDiff(string datePartArg, DateTime startDate, DateTime endDate)
{
var subtract = startDate.Subtract(endDate);
switch (datePartArg)
{
case "d":
return (int?)subtract.TotalDays;
case "s":
return (int?)subtract.TotalSeconds; // unit test will use this one
}
throw new NotSupportedException("Method supports only s or d param");
}
}
然后在linq代码中
var sqlFunctions = new MySqlFunctions();
var result = matches.Average(s => sqlFunctions.DateDiff("s", s.MatchCreated, s.WaitingStarted);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)