1

私のデータコンテキストには、テーブル UserProfile との 1 対多の関係を持つ Userlog という名前のテーブルが含まれています。

クラス内 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 を仮想化すれば実行できますが、部分クラスで実行したいと考えています。

何か案は?

ありがとうジェレミー

4

1 に答える 1

1

メソッドを仮想にする必要がある理由は、直接クラスをモックしているためです。これにアプローチする最良の方法は、(あなたが提案したように) 部分クラスを作成し、その部分クラスにインターフェイスを継承させることです。したがって、次のようなものになります:
designer.cs -> public partial class UserLog UserLog.cs -> public partial
class UserLog : IUserLog
IUserLog.cs -> 実装する必要があるメソッド (メソッドは designer.cs によって実装されます)

作成するクラス (UserLog.cs) は、IUserLog を実装できるようにするためだけに存在します。IUserLog には、public UserProfile UserProfile() のように、実装する必要があるすべてのメソッドが含まれます。

それが完了したら、クラスの代わりにインターフェースをモックできます。
これが役に立てば幸いですが、説明したよりも難しいかもしれません。

于 2010-04-28T10:23:12.773 に答える