2014-11-03 38 views
4

这个问题清楚地表明如何通过MOQ嘲笑索引属性:How to Moq Setting an Indexed property如何使用起订量来嘲笑与索引属性有两个指标

但是,如果你有两个指标?

举例来说,假设你有一个_Worksheet对象(从VSTO)

 var mockWorksheet = new Mock<_Worksheet>(); 

你想创建一个属性叫做细胞,这样你可以使用它像这样:

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

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

有什么建议吗?

回答

2

与其他任何东西一样,您可以模拟属性索引器。他们被视为属性访问器,所以你会使用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 
+0

令人惊叹。谢谢。 – zumalifeguard 2014-11-04 16:46:02

+0

对我来说,使用'mockType.SetupGet(p => p [1])返回(mockReturnType.Object);'抛出'缺少方法异常'。相反,我嘲笑get_Item方法,它按预期工作。 'mockType.Setup(p => p.get_Item [1])。返回(mockReturnType.Object);' – Prokurors 2015-12-21 09:01:21