如何模擬EntityFramework的IQueryable實現的局限性我目前正在為MVC4應用程序中的存儲庫實現編寫單元測試。為了模擬數據上下文,我開始采用這篇文章中的一些想法,但我現在發現了一些限制,讓我懷疑是否有可能正確模擬IQueryable。特別是,我已經看到了一些測試通過但代碼在生產中失敗的情況,并且我無法找到任何方法來模擬導致此失敗的行為。例如,以下代碼段用于選擇Post屬于預定義類別列表的實體:var posts = repository.GetEntities<Post>(); // Returns IQueryable<Post>var categories = GetCategoriesInGroup("Post"); // Returns a fixed list of type Categoryvar filtered = posts.Where(p => categories.Any(c => c.Name == p.Category)).ToList();在我的測試環境中,我試圖嘲弄posts使用假DbSet上面提到的實施,同時也通過創建List的Post實例并將其轉換為IQueryable使用AsQueryable()擴展方法。這兩種方法都在測試條件下工作,但代碼實際上在生產中失敗,但有以下例外:System.NotSupportedException : Unable to create a constant value of type 'Category'. Only primitive types or enumeration types are supported in this context.雖然像這樣的LINQ問題很容易解決,但真正的挑戰是找到它們,因為它們不會在測試環境中顯示出來。我期望我可以嘲笑實體框架的實施行為,這是不現實的IQueryable嗎?謝謝你的想法,蒂姆。
添加回答
舉報
0/150
提交
取消