Tengo problemas para averiguar cómo configurar indexers en C# con Moq. La documentación Moq es débil, y he hecho un montón de búsqueda ... lo que me gustaría hacer es similar en la solución a How to Moq Setting an Indexed property:Usando Moq para configurar indexadores en C#
var someClass = new Mock<ISomeClass>();
someClass.SetupSet(o => o.SomeIndexedProperty[3] = 25);
Quiero modificar lo anterior a trabajar para cualquier índice y cualquier valor por lo que puedo hacer algo como esto:
someClass.Object.SomeIndexedProperty[1] = 5;
Actualmente tengo el siguiente, que funciona muy bien para la propiedad de captador indexado, pero si alguna vez establecer el valor Moq lo ignora:
var someValues = new int[] { 10, 20, 30, 40 };
var someClass = new Mock<ISomeClass>();
someClass.Setup(o => o.SomeIndexedProperty[It.IsAny<int>()])
.Returns<int>(index => someValues[index]);
// Moq doesn't set the value below, so the Assert fails!
someClass.Object.SomeIndexedProperty[3] = 25;
Assert.AreEqual(25, someClass.Object.SomeIndexedProperty[3]);
¿Cuál es la variable de índice? ¿De dónde viene? – Grzenio
Soy nuevo en Moq, así que tal vez estoy haciendo algo mal ... pero pensé que el parámetro de índice en la lambda de devoluciones estaba siendo proporcionado por el It.IsAny() expresión en la configuración lambda. –
Tampoco soy un experto (estoy usando RhinoMocks). ¿SomeClass.Object.SomeIndexedProperty [3] devuelve 40? – Grzenio