Tôi đang gặp sự cố khi tìm ra cách đặt indexers trong C# bằng Moq. Các tài liệu Moq là yếu, và tôi đã làm rất nhiều công tìm kiếm ... những gì tôi muốn làm là tương tự như trong các giải pháp để How to Moq Setting an Indexed property:Sử dụng Moq để đặt người lập chỉ mục trong C#
var someClass = new Mock<ISomeClass>();
someClass.SetupSet(o => o.SomeIndexedProperty[3] = 25);
Tôi muốn thay đổi ở trên để làm việc cho bất kỳ chỉ số và bất kỳ giá trị vì vậy tôi chỉ có thể làm một cái gì đó như thế này:
someClass.Object.SomeIndexedProperty[1] = 5;
Hiện nay tôi có những điều sau đây, mà làm việc tuyệt vời cho các getter tài sản được lập chỉ mục, nhưng nếu tôi đã từng thiết lập giá trị Moq bỏ qua nó:
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]);
Biến chỉ mục là gì? Nó từ đâu tới? – Grzenio
Tôi mới làm quen với Moq vì vậy có lẽ tôi đang làm điều gì đó sai ... nhưng tôi nghĩ rằng tham số chỉ mục trong lambda Returns được cung cấp bởi nó.Biểu thức IsAny() trong lambda Cài đặt. –
Tôi cũng không phải là chuyên gia (tôi đang sử dụng RhinoMocks). Liệu someClass.Object.SomeIndexedProperty [3] có trả về 40 không? – Grzenio