我有以下UserRepository:
public class UserRepository : Repository<Entities.User> {
public Entities.IUser Find(string domain, string username, string password) {
return (from u in FindAll()
where u.Account.SubDomain == domain && u.EmailAddress == username && u.PasswordHash == password
&& !u.IsArchived
select u).FirstOrDefault();
}
}
“FindAll”方法是Repository的一部分,基本上只调用context.GetTable()。AsQueryable()
我希望能够编写一个调用此存储库方法的测试,但不是访问数据库而是使用一些内存存储。
我已经做了很多搜索,我似乎遇到了关于模拟存储库并返回List(通常在单元测试开始时创建)的所有内容,但我不明白的是什么用途是什么。我想确保我编写的linq查询实际上是正确地过滤对象并仅检索所需的记录。 由于DataContext没有接口,我不能简单地模仿它。
我能看到处理这个问题的另一种方法是实际与数据库通信,但我知道这不是单元测试的重点。
我的问题是其他人如何处理这件事?
答案 0 :(得分:1)
你不需要一个界面来模拟东西。您可以轻松地创建一个派生自DataContext
的模拟并将其传递到您的存储库。
答案 1 :(得分:1)
感谢@Daniel Higarths上面的最后评论,他提到了Moles,这帮助我解决了这个问题以及以下视频http://dimecasts.net/Content/WatchEpisode/170