为了账号安全,请及时绑定邮箱和手机立即绑定

如何模拟EntityFramework的IQueryable实现的局限性

如何模拟EntityFramework的IQueryable实现的局限性

茅侃侃 2019-08-17 16:07:21
如何模拟EntityFramework的IQueryable实现的局限性我目前正在为MVC4应用程序中的存储库实现编写单元测试。为了模拟数据上下文,我开始采用这篇文章中的一些想法,但我现在发现了一些限制,让我怀疑是否有可能正确模拟IQueryable。特别是,我已经看到了一些测试通过但代码在生产中失败的情况,并且我无法找到任何方法来模拟导致此失败的行为。例如,以下代码段用于选择Post属于预定义类别列表的实体:var posts = repository.GetEntities<Post>(); // Returns IQueryable<Post>var categories = GetCategoriesInGroup("Post"); // Returns a fixed list of type Categoryvar filtered = posts.Where(p => categories.Any(c => c.Name == p.Category)).ToList();在我的测试环境中,我试图嘲弄posts使用假DbSet上面提到的实施,同时也通过创建List的Post实例并将其转换为IQueryable使用AsQueryable()扩展方法。这两种方法都在测试条件下工作,但代码实际上在生产中失败,但有以下例外:System.NotSupportedException : Unable to create a constant value of type 'Category'. Only primitive types or enumeration types are supported in this context.虽然像这样的LINQ问题很容易解决,但真正的挑战是找到它们,因为它们不会在测试环境中显示出来。我期望我可以嘲笑实体框架的实施行为,这是不现实的IQueryable吗?谢谢你的想法,蒂姆。
查看完整描述

2 回答

  • 2 回答
  • 0 关注
  • 712 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信