如何测试我的linq存储库调用

时间:2011-08-16 10:25:00

标签: unit-testing linq-to-sql tdd

我有以下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没有接口,我不能简单地模仿它。

我能看到处理这个问题的另一种方法是实际与数据库通信,但我知道这不是单元测试的重点。

我的问题是其他人如何处理这件事?

2 个答案:

答案 0 :(得分:1)

你不需要一个界面来模拟东西。您可以轻松地创建一个派生自DataContext的模拟并将其传递到您的存储库。

答案 1 :(得分:1)

感谢@Daniel Higarths上面的最后评论,他提到了Moles,这帮助我解决了这个问题以及以下视频http://dimecasts.net/Content/WatchEpisode/170