У меня возникли проблемы с определением, как установить indexers в C# с помощью Moq. Документация Moq слаба, и я сделал много поиска ... то, что я хотел бы сделать, это аналогично в растворе How to Moq Setting an Indexed property:Использование Moq для установки индексаторов в C#
var someClass = new Mock<ISomeClass>();
someClass.SetupSet(o => o.SomeIndexedProperty[3] = 25);
Я хочу изменить выше, чтобы работать для любого индекс и любое значение, так что я могу просто сделать что-то вроде этого:
someClass.Object.SomeIndexedProperty[1] = 5;
в настоящее время у меня есть следующие, который отлично работает для геттера индексируемой собственности, но если я когда-либо установить значение Moq игнорирует:
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]);
Что такое индексная переменная? Откуда он? – Grzenio
Я новичок в Moq, так что, возможно, я что-то делаю неправильно ... но я думал, что параметр index в лямбда Returns был предоставлен It.IsAny() выражение в настройке лямбда. –
Я тоже не эксперт (я использую RhinoMocks). Does someClass.Object.SomeIndexedProperty [3] возвращает 40? – Grzenio