2010-04-21 142 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()。

一旦你完成了,你可以模拟接口而不是类。
我希望这有助于,但可能会更困难,然后我解释一下。