如何使用Moq来模拟具有两个索引的索引属性

这个问题清楚地显示了你如何用MOQ模拟索引属性: 如何设置索引属性

但是,如果你有两个索引呢?

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

var mockWorksheet = new Mock<_Worksheet>(); 

你想创build一个名为Cells的属性,这样你就可以像这样使用它:

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

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

有什么build议么?

你就像其他东西一样嘲笑房产指数。 他们被视为属性访问器,所以你会使用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