2012-07-17 38 views
9

我正在使用Moq編寫單元測試。我創建了一個模擬對象。現在,當我嘗試模擬其屬性,我得到錯誤「表達式樹可能不包含索引屬性」模仿索引屬性

這裏是我的代碼。

public Node GetNode(IMyInterface interface, string itemName) 
{ 
    return interface.Items[itemName]; 
} 

這裏是單元測試

var expected = new Node(); 
var itemName = "TestName"; 
var mock = new Mock<IMyInterface>(); 
mock.Setup(f => f.Items[itemName]).Returns(expected); 
var target = new MyClass(); 

var actual = target.GetNode(mock.Object, itemName); 
Assert.AreEqual(expected, actual); 

此行是給我的錯誤。

mock.Setup(f => f.Items[itemName]).Returns(expected); 

我該怎麼辦這個功能。

+0

這不是一個問題,起訂量直接訪問屬性。表達式樹不能包含索引屬性,因爲錯誤狀態。您應該重構代碼以訪問列表中的項目,而不是使用索引。 – 2012-07-17 10:12:50

+0

我無法更改「interface.Items [itemName];」因爲我通過COM獲得它,任何方式在測試中做到這一點, – 2012-07-17 10:15:58

+0

什麼是項目?你能提供完整的接口定義嗎? – 2012-07-17 10:17:11

回答

12

接口是一個COM對象,並有得到的功能,所以不是使用索引使用獲取函數,

mock.Setup(f => f.get_Items(itemName)).Returns(expected); 
+0

您是否嘗試過'mock.Setup(f => f [itemName])。返回(預期);'?不知道它是否適用於您的情況(COM)(C#和.NET版本?),但看起來好多了。 – 2013-11-30 09:44:45