我的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设为虚拟,我可以这样做,但我想在部分类中执行此操作。
有什么想法吗?
由于 杰里米
答案 0 :(得分:1)
您需要将该方法设为虚拟的原因是因为您正在模拟直接类。解决这个问题的最佳方法是创建一个部分类(就像你建议的那样),然后让这个部分类成为一个接口。所以你会有类似的东西:
designer.cs - &gt;公共部分类UserLog
UserLog.cs - &gt;公共部分类UserLog:IUserLog
IUserLog.cs - &gt;应该实现的方法(方法将由designer.cs实现)
您创建的部分类(UserLog.cs)仅用于实现IUserLog。然后,IUserLog将包含所有需要实现的方法,例如:public UserProfile UserProfile()。
完成后,您可以模拟界面而不是类 我希望这有所帮助,但我解释的可能会更困难。