我已经用C#,MVC,实体框架,LINQ等编写了一个Web应用程序......现在我想追溯地为整个项目创建单元测试。为单元测试创建存储库
据我所知,为了编写有效的单元测试,我需要为模型创建存储库,以便它们可以被模拟,因此实体框架将对数据库执行任何命中。
我有3个主要模型;类别,密码,用户密码。
类别包含类别和密码。密码包含UserPasswords(链接到用户帐户)。所以我创建了3个存储库,其基本方法如:创建,删除,更新等..
然而,看着这个LINQ查询:
var selectedCategoryItem = DatabaseContext.Categories
.Where(c => c.CategoryId == ParentCategoryId)
.Include(c => c.SubCategories)
.Include(c => c.Passwords)
.Include(c => c.Passwords.Select(p => p.Creator))
.ToList()
.Select(c => new Category()
{
SubCategories = c.SubCategories
.Where(sub => !sub.Deleted)
.OrderBy(sub => sub.CategoryOrder)
.ToList(), //make sure only undeleted subcategories are returned
Passwords = c.Passwords
.Where(pass => !pass.Deleted
&& (
(UserPasswordList.Any(up => up.PasswordId == pass.PasswordId && up.Id == UserId))
|| (userIsAdmin && ApplicationSettings.Default.AdminsHaveAccessToAllPasswords)
|| pass.Creator_Id == UserId
)
) //make sure only undeleted passwords - that the current user has acccess to - are returned
.OrderBy(pass => pass.PasswordOrder)
.ToList(),
CategoryId = c.CategoryId,
CategoryName = c.CategoryName,
Category_ParentID = c.Category_ParentID,
CategoryOrder = c.CategoryOrder,
Parent_Category = c.Parent_Category,
Deleted = c.Deleted
})
.SingleOrDefault();
如果仓库只是像保存,更新,删除,插入,FindById等基本方法....我应该如何将查询分解成存储库?这里还有很多商业逻辑,例如过滤用户可以访问的密码,应该在哪里?
我读了一些关于返回IQueryable对象的信息,以便可以在服务层中更改LINQ查询......看起来如何?
你看着努力呢? HTTPS://effort.codeplex。com/ – Bringer128 2014-12-02 01:19:16