使用Moq将Linq模拟到Sql EntityRef?

时间:2010-04-21 01:46:08

标签: linq-to-sql moq entityreference

我的datacontext包含一个名为Userlog的表,该表与UserProfile表有一对多的关系。

在班级用户日志

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

在类UserProfile

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并将FirstName和UserProfile设为虚拟,我可以这样做,但我想在部分类中执行此操作。

有什么想法吗?

由于 杰里米

1 个答案:

答案 0 :(得分:1)

您需要将该方法设为虚拟的原因是因为您正在模拟直接类。解决这个问题的最佳方法是创建一个部分类(就像你建议的那样),然后让这个部分类成为一个接口。所以你会有类似的东西:
designer.cs - &gt;公共部分类UserLog
UserLog.cs - &gt;公共部分类UserLog:IUserLog
IUserLog.cs - &gt;应该实现的方法(方法将由designer.cs实现)

您创建的部分类(UserLog.cs)仅用于实现IUserLog。然后,IUserLog将包含所有需要实现的方法,例如:public UserProfile UserProfile()。

完成后,您可以模拟界面而不是类 我希望这有所帮助,但我解释的可能会更困难。