我的模型(dbml文件)中有一个表aspnet_User
,其中有一个属性UserName
,它是ReadOnly。我以为我能做到这一点。
var mockAsp_NetUser = new Mock<aspnet_User>();
mockAsp_NetUser.SetupGet(au => au.UserName).Returns("JohnDoe");
但后来我得到一个例外:在一个不可覆盖的成员上设置无效。
一个简单的解决方案是在模型设计器中将UserName
的ReadOnly属性设置为false。但这可能是一个黑客。有更“正确”的方式吗?
答案 0 :(得分:1)
你无法模仿虚拟或抽象的东西。
如果您正在尝试对代码进行单元测试,那么更好的方法是定义一个IUser类,让代码对该接口起作用。
答案 1 :(得分:1)
只是Marks答案的补充:
在DBML中,您可以设置该属性应具有“Instance Modifier”=“virtual”。默认设置为(无)。
对于您的示例,这意味着:在DBML Designer中,选择Member“UserName”,在Properties中找到“Instance Modifier”。
设置为虚拟后,您的代码就可以运行。