パラメーター化されたコンストラクターを使用してオブジェクトをモックしているときに、コンストラクター内で初期化されているプロパティが仮想の場合、Moq はプロパティ値を設定しません。ただし、非仮想プロパティの場合は、Moq が値を設定します。
以下は、私がモックしたい私のクラスです。
public class Activity
{
private Activity() {}
public Activity(string code, string description, string option)
{
if(string.IsNullOrEmpty(code)) throw new ArgumentNullException("code");
if (string.IsNullOrEmpty(option)) throw new ArgumentNullException("option");
Code = code;
Description = description;
Option = option;
}
public virtual string Code { get; private set; }
public virtual string Description { get; private set; }
public virtual string Option { get; private set; }
}
これは私がそれをモックしようとする方法です:
[TestMethod]
public void It_Creates_Mock_For_A_Class()
{
var mock = new Mock<Activity>("Code 1", null, "Option");
Assert.IsNotNull(mock.Object);
Assert.AreEqual("Code 1", mock.Object.Code);
}
テスト メソッドは次のように言って失敗します: Assert.AreEqual が失敗しました。期待される:。実際:<(null)>。
しかし、すべてのプロパティから virtual キーワードを削除すると、機能してテスト ケースに合格します。
Entity Framework のため、プロパティを仮想に保つ必要があります。
どんな手掛かり?この問題を回避するにはどうすればよいですか?