Перемешать Linq в Sql EntityRef, используя Moq? - PullRequest
1 голос
/ 21 апреля 2010

Мой datacontext содержит таблицу Userlog с отношением один ко многим с таблицей UserProfile.

В классе UserLog

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 Ответ

1 голос
/ 28 апреля 2010

Причина, по которой вам нужно сделать метод виртуальным, заключается в том, что вы издеваетесь над прямым классом. Лучший способ подойти к этому - создать частичный класс (как вы предложили) и позволить этому частному классу создать интерфейс. Так что у вас будет что-то вроде:
designer.cs -> открытый частичный класс UserLog
UserLog.cs -> открытый частичный класс UserLog: IUserLog
IUserLog.cs -> методы, которые должны быть реализованы (методы будут реализованы designer.cs)

Частичный класс, который вы создаете (UserLog.cs), существует только для того, чтобы можно было реализовать IUserLog. IUserLog будет содержать все методы, которые необходимо реализовать, например: public UserProfile UserProfile ().

Как только вы это сделаете, вы можете смоделировать интерфейс вместо класса.
Надеюсь, это помогло, хотя это может быть сложнее, чем я объяснил.

...