2010-04-21 86 views
1

我的datacontext包含一個名爲Userlog的表,它與表UserProfile具有一對多的關係。使用Moq將Linq模擬到Sql EntityRef?

在用戶日誌類

public UserProfile UserProfile 
{ 
    get {return this._UserProfile.Entity;} 
} 

在課堂上用戶配置

public EntitySet<UserLog> UserLogs 
{ 
    get{return this._UserLogs;} 
} 
{ 
    set {this._UserLogs.Assign(value); 
} 

我怎麼會去嘲諷(使用MOQ)UserLog.UserProfile不改變自動生成的代碼?

我想什麼做的是一樣的東西:

var mockUserLog = new Mock<UserLog>(); 
mockUserLog.Setup(c=>c.UserProfile.FirstName).Returns("Fred"); 

如果我去到designer.cs,使名字和用戶配置虛擬我能做到這一點,但是我想在部分課堂上做到這一點。

任何想法?

感謝 傑里米

回答

1

你需要做的方法虛擬的原因是因爲你是嘲諷的直接類。解決這個問題的最好方法是創建一個部分類(就像你所建議的那樣),讓這個部分類嵌入一個接口。所以,你會碰到這樣的:
designer.cs - >公共部分類用戶日誌
UserLog.cs - >公共部分類用戶日誌:IUserLog
IUserLog.cs - 應該實現的>方法(methods將被執行designer.cs)

您創建的部分類(UserLog.cs)僅用於實現IUserLog。然後,IUserLog將包含所有需要實現的方法,如:public UserProfile UserProfile()。

一旦你完成了,你可以模擬接口而不是類。
我希望這有助於,但可能會更困難,然後我解釋一下。