我有以下UserRepository:如何測試我的LINQ庫調用
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」 的方法是存儲庫的一部分,基本上只是調用context.GetTable()AsQueryable已()
我希望能夠編寫一個將調用此存儲庫方法的測試,但不是訪問數據庫而是使用某些內存存儲。
我已經做了很多搜索,並且我似乎遇到了有關嘲笑存儲庫並返回一個List(通常是在單元測試開始時創建)的討論,但我不明白什麼是使用那。我想確保我寫的linq查詢實際上是正確地過濾對象並只檢索所需的記錄。由於DataContext沒有接口,我不能簡單地將它嘲笑出來。
我可以看到處理這個唯一的其他方式是實際與db對話,但我知道這不是單元測試的要點。
我的問題是其他人如何處理這個問題?
一起解決這個問題,我如何去這樣做? – Gazeth
我不知道我明白。你有什麼問題?創建一個從DataContext派生的模擬類? '類MockDataContext:DataContext {/ * ... * /}'或注入到存儲庫? –
對不起,我對這一切都很陌生。你是說我應該創建這個MockDataContext,然後使用StructureMap將其注入到我通常使用的datacontext中?那麼是否可以讓我使用moq來說當gettable在我的普通datacontext上被調用時只返回一個我需要的對象的iqueryable列表,這樣我就不會真正與活動數據庫交談。 – Gazeth