2012-07-11 80 views
1

我想弄清楚如何通過TDD編寫實體框架代碼第一代碼。我發現它很難,因爲我沒有像過去使用Ruby On Rails那樣的測試數據庫。可能更容易用一個例子來說明:如何測試EF模型

目前我有:

public interface IMyContext 
{ 
    IDbSet<UserProfile> Users { get; set; } 
} 

public class UserModel 
{ 
    IMyContext myContext; 

    UserModel(IMyContext myContext) 
    { 
     this.myContext = myContext; 
    } 

    UserProfile GetUser(int id) 
    { 
     return myContext.Users.Where(u => u.id == id); 
    } 
} 

我不知道如何測試的usermodel代碼,而正在運行的數據庫。我知道我可以模擬MyContext - 但代碼myContext.Users.Where ...可能涉及複雜的嘲弄?我的代碼是否錯誤?如何在沒有測試數據庫的情況下爲模型編寫測試?或者我應該僞造上下文?

謝謝!

回答

0

將代碼分解爲核心組件,您將意識到您需要做的就是模擬上下文的Users屬性。在此之後,如果真的只是針對IEnumerable對象工作

var users = myContext.Users; 
var returnEnumerable = Enumerable.Where(users, u=>u.id == id); 
return returnEnumerable 

於是,在嘲笑你的情況下以這樣的方式,當.Users被稱爲靜態方法,它返回你做

+0

奧凱的IDbSet<UserProfile> ,這是有道理的,但不是IDbSet的接口呢?所以我們也必須嘲笑它​​呢? – Karan 2012-07-12 09:07:05

+0

你可以做到這一點,或者你可以讓用戶作爲IDbSet的具體實現返回 – 2012-07-19 19:28:36