.net – 如何使用Moq来模拟索引属性,它具有两个索引

这个问题清楚地说明了如何使用MOQ:
How to Moq Setting an Indexed property模拟索引属性

但是,如果你有两个索引怎么办?

例如,假设您有一个_Worksheet对象(来自vsto)

        var mockWorksheet = new Mock<_Worksheet>();

您想要创建一个名为Cells的属性,以便您可以像这样使用它:

        var range = worksheet.Cells[1,1];

注意:
范围可以是另一个模拟,可以用以下模拟:
            var mockRange = new Mock();

有什么建议?

最佳答案 你可以像其他任何东西一样模拟属性索引器.它们被视为属性访问器,因此您使用SetupGet:

var mockWorksheet = new Mock<Worksheet>();
var mockRange = new Mock<Range>();
var mockCell = new Mock<Range>();

// Setup the Cells property to return a range     
mockWorksheet.SetupGet(p => p.Cells).Returns(mockRange.Object);

// Setup the range to return an expected "cell"
mockRange.SetupGet(p => p[1, 2]).Returns(mockCell.Object);

var expectedCell = mockWorksheet.Object.Cells[1, 2];

// expectedCell == mockCell.Object
点赞