【问题标题】:Testing : How to create fake object context using TypeMock for EF4 model测试:如何使用 TypeMock 为 EF4 模型创建假对象上下文
【发布时间】:2011-10-28 14:40:25
【问题描述】:

我在我的应用程序中使用 EF4,我想为 DAL 方法制作测试用例,这些方法通常会访问数据库以获取数据。我正在使用 Typemock 框架进行 Mocking。我想模拟数据库调用,只想测试查询。例如:

ObjectContext.Where(u => u.code == Code) 

为此,我需要为 EF 模型制作 Fake ObjectContext,并希望在 Fake ObjectContext 中填充一些假数据,以便我们可以在假 ObjectContext 上执行查询 (LINQ)。请建议我如何创建假对象上下文(使用 TypeMock 框架)并在实体中填充数据。

例如,我有以下方法:

protected IObjectSet<T> CreateObjectSet<T>() where T : EntityBase 
{ 
    return _context.CreateObjectSet<T>(); 
}

我正在创建一个测试用例来模拟 _context,但是 _context 为空。我的测试用例是:

var fakeInMemoryBlogs = GetUsers();    
var fakeContext = Isolate.Fake.Instance<SecurityEntitiesUOW>(); 
var fakeGenericRepository = Isolate.Fake.Instance<GenericRepository>
    (Members.CallOriginal, ConstructorWillBe.Called, fakeContext); 
Isolate.WhenCalled(() => fakeContext.Context.CreateObjectSet<SecUser>()) 
    .WillReturnCollectionValuesOf(fakeInMemoryBlogs.AsQueryable());

【问题讨论】:

  • 在模拟上下文时,关于 LINQ-to-Entities 与 LINQ-to-Objects 的区别很好,Ladislav。也许封装 LINQ 查询并针对真实数据库进行测试,并在测试业务逻辑时模拟这些查询。
  • 嗨,我想使用 TypeMock 创建用于单元测试的 Fake ObjectContext,并在 fake ObjectContext 中填充所有必需的实体,这样我就可以验证 lamda 表达式和仅包含子句而无需访问数据库。请建议我。谢谢

标签: unit-testing entity-framework-4 mocking typemock-isolator


【解决方案1】:

这已经被问过几次了。做了一些搜索并想出了以下资源:

使用 TypeMock Isolator 引入实体框架单元测试

http://mosesofegypt.net/post/Introducing-Entity-Framework-Unit-Testing-with-TypeMock-Isolator.aspx

使用存储库模式抽象 ObjectContext

EF4 - possible to mock ObjectContext for unit testing?

如何在实体框架中模拟 ObjectContext 或 ObjectQuery?

How to mock ObjectContext or ObjectQuery<T> in Entity Framework?

【讨论】:

  • 谢谢,但我有一个类似的方法: protected IObjectSet CreateObjectSet() where T : EntityBase { return _context.CreateObjectSet(); },我正在创建测试用例来用假 ObjectContext 模拟 _context,它显示 _context 为空。
  • 我的测试用例例如:var fakeInMemoryBlogs = GetUsers(); //(2) 创建假上下文 var fakeContext = Isolate.Fake.Instance(); var fakeGenericRepository = Isolate.Fake.Instance(Members.CallOriginal, ConstructorWillBe.Called, fakeContext); //(3) 通过假上下文设置对 MyBlogContext.Blogs 属性的预期调用 Isolate.WhenCalled(() => fakeContext.Context.CreateObjectSet()) .WillReturnCollectionValuesOf(fakeInMemoryBlogs.AsQueryable());
  • 嗨,我想使用 TypeMock 创建用于单元测试的 Fake ObjectContext,并在 fake ObjectContext 中填充所有必需的实体,这样我就可以验证 lamda 表达式和仅包含子句而无需访问数据库。请建议我。谢谢
猜你喜欢
  • 2022-08-17
  • 1970-01-01
  • 1970-01-01
  • 2021-09-22
  • 1970-01-01
  • 2020-12-05
  • 1970-01-01
  • 1970-01-01
  • 2021-09-21
相关资源
最近更新 更多