제대로 발견으로이 뚜렷한 방법이 있습니다 SetupGet
및 SetupSet
각각 getter 및 setter를 초기화 할 수 있습니다. 하지만이 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);
보시다시피 인덱서 setter를 설정하려면 명시 적으로 키를 지정해야합니다. 자세한 내용은 다른 SO 질문에 설명되어 있습니다. Moq 인덱싱 된 속성 및 반환 / 콜백에서 인덱스 값 사용