LencoTB
LencoTB

Reputation: 11

Moq Linq-to-SQL readonly property

I have a table aspnet_User in my model(dbml file) where I have a property UserName which is ReadOnly. I thought I could do this.

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

But then I get an exception: Invalid setup on a non-overridable member.

An easy solution would be to set the ReadOnly property for UserName to false in the model designer. But this might be a hack. Is there a more "correct" way?

Upvotes: 1

Views: 745

Answers (2)

PeterFromCologne
PeterFromCologne

Reputation: 10493

Just an addition to Marks answer:

In the DBML you can set that the property should have "Instance Modifier" = "virtual". By default its set to (None).

For your example that means: In the DBML Designer, select the Member "UserName" and in the Properties you will find "Instance Modifier".

Once set to virtual your code will work.

Upvotes: 1

Mark Seemann
Mark Seemann

Reputation: 233477

You can't mock what is not either virtual or abstract.

If you are trying to unit test your code, a better approach would be to define an IUser class and let your code work against that interface.

Upvotes: 1

Related Questions