あなたが正しく見つけたように、ゲッターとセッターをそれぞれ初期化するための個別のメソッドがSetupGet
あります。SetupSet
ただしSetupGet
、インデクサーではなくプロパティに使用することを意図しており、渡されたキーを処理することはできません。正確には、インデクサーはとにかくSetupGet
呼び出します。Setup
internal static MethodCallReturn<T, TProperty> SetupGet<T, TProperty>(Mock<T> mock, Expression<Func<T, TProperty>> expression, Condition condition) where T : class
{
return PexProtector.Invoke<MethodCallReturn<T, TProperty>>((Func<MethodCallReturn<T, TProperty>>) (() =>
{
if (ExpressionExtensions.IsPropertyIndexer((LambdaExpression) expression))
return Mock.Setup<T, TProperty>(mock, expression, condition);
...
}
...
}
あなたの質問に答えるために、基になるコードを使用しDictionary
て値を保存するコード サンプルを次に示します。
var dictionary = new Dictionary<string, object>();
var applicationSettingsBaseMock = new Mock<SettingsBase>();
applicationSettingsBaseMock
.Setup(sb => sb[It.IsAny<string>()])
.Returns((string key) => dictionary[key]);
applicationSettingsBaseMock
.SetupSet(sb => sb["Expected Key"] = It.IsAny<object>())
.Callback((string key, object value) => dictionary[key] = value);
ご覧のとおり、インデクサー セッターを設定するには、キーを明示的に指定する必要があります。詳細は別の SO の質問で説明されています:インデックス付きプロパティを Moq し、リターン/コールバックでインデックス値を使用します。