【发布时间】: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