Non riesco a capire come impostare indexers in C# con Moq. La documentazione Moq è debole, e ho fatto un sacco di ricerche ... quello che mi piacerebbe fare è simile nella soluzione per How to Moq Setting an Indexed property:Uso di Moq per impostare gli indicizzatori in C#
var someClass = new Mock<ISomeClass>();
someClass.SetupSet(o => o.SomeIndexedProperty[3] = 25);
voglio modificare il precedente per funzionare per qualsiasi indice e qualsiasi valore così posso solo fare qualcosa di simile:
someClass.Object.SomeIndexedProperty[1] = 5;
Attualmente ho il seguente, che funziona alla grande per il getter proprietà indicizzata, ma se mai impostato il valore 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]);
Qual è la variabile dell'indice? da dove viene? – Grzenio
Sono nuovo di Moq quindi forse sto facendo qualcosa di sbagliato ... ma pensavo che il parametro index nel lambda Returns fosse fornito da It.IsAny() espressione nel setup lambda. –
Non sono neanche un esperto (sto usando RhinoMocks). QualcheClass.Object.SomeIndexedProperty [3] restituisce 40? – Grzenio