2014-11-03 41 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