Moq Linq-to-SQL readonly属性

时间:2009-11-24 10:52:16

标签: asp.net asp.net-mvc visual-studio-2008 linq-to-sql moq

我的模型(dbml文件)中有一个表aspnet_User,其中有一个属性UserName,它是ReadOnly。我以为我能做到这一点。

var mockAsp_NetUser = new Mock<aspnet_User>();
mockAsp_NetUser.SetupGet(au => au.UserName).Returns("JohnDoe");

但后来我得到一个例外:在一个不可覆盖的成员上设置无效。

一个简单的解决方案是在模型设计器中将UserName的ReadOnly属性设置为false。但这可能是一个黑客。有更“正确”的方式吗?

2 个答案:

答案 0 :(得分:1)

你无法模仿虚拟或抽象的东西。

如果您正在尝试对代码进行单元测试,那么更好的方法是定义一个IUser类,让代码对该接口起作用。

答案 1 :(得分:1)

只是Marks答案的补充:

在DBML中,您可以设置该属性应具有“Instance Modifier”=“virtual”。默认设置为(无)。

对于您的示例,这意味着:在DBML Designer中,选择Member“UserName”,在Properties中找到“Instance Modifier”。

设置为虚拟后,您的代码就可以运行。