当前位置:  开发笔记 > 运维 > 正文

如何在Entity Framework中模拟ObjectContext或ObjectQuery <T>?

如何解决《如何在EntityFramework中模拟ObjectContext或ObjectQuery<T>?》经验,为你挑选了1个好方法。

如何在Entity Framework中模拟ObjectContext或ObjectQuery?



1> Gaspar Nagy..:

基本的模拟框架只能为接口和抽象类创建模拟(但仅适用于抽象/虚方法).

由于ObjectContext既不是抽象也不是接口,因此模拟它并不容易.但是,由于具体模型容器是作为部分类生成的(如果使用设计器),您可以从中将所需的方法/属性提取到接口.在您的代码中,您可以仅使用界面,然后您可以模拟.

使用ObjectQuery它更容易,因为它有一个基本接口(例如IQueryable),基本上包含您通常需要的所有必要操作(以及LINQ所需的操作).因此,您应该在业务逻辑中公开IQueryable而不是ObjectQuery,并且可以为该接口创建模拟.

另一种方法是将所有与数据访问相关的逻辑隐藏到一个单独的层中(使用最少的逻辑),使用集成测试测试该层,并模拟它以便能够对其他层进行单元测试.

有一些工具(我只知道TypeMock)使用.NET的分析钩子来生成模拟.这些工具不仅限于模拟接口或抽象类,但使用它们,您可以基本上模拟任何东西,包括非虚拟和静态方法.使用这样的工具,您无需更改业务逻辑即可进行模拟.

虽然这种方法有时很有用,但您必须意识到,将依赖项提取到接口(IoC)不仅有助于模拟,而且还可以减少组件之间的依赖关系,这也有其他好处.

我个人喜欢Rhino.Mocks最好的免费软件工具,但我们也使用TypeMock,这也是一个很棒的产品(但你必须付钱).


是的...只是确保你没有在抽象中降低IEnumerable级别,因为LINQ开始表现不同(查询将在内存中执行而不是由db服务器执行).
推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有