2012-07-17 9 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

एक MOQ समस्या नहीं है यही कारण है कि इंडेक्सर उपयोग समारोह मिल का उपयोग करते हुए संपत्ति तक पहुँचने का। अभिव्यक्ति पेड़ में त्रुटि वाले राज्यों के रूप में अनुक्रमित गुण नहीं हो सकते हैं। इंडेक्स का सहारा लेने के लिए आपको सूची में आइटम तक पहुंचने के लिए अपने कोड को दोबारा करना चाहिए। –

+0

मैं "इंटरफ़ेस" नहीं बदल सकता। आइटम्स [आइटम नाम]; " क्योंकि मैं इसे COM के माध्यम से प्राप्त कर रहा हूं, परीक्षण में ऐसा करने का कोई भी तरीका, –

+0

आइटम वास्तव में क्या है? क्या आप पूर्ण इंटरफ़ेस परिभाषा प्रदान कर सकते हैं? –

उत्तर

12

इंटरफ़ेस एक COM वस्तु थी और वहाँ थे समारोह मिलता है, तो बजाय सीधे,

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

क्या आपने 'mock.Setup (f => f [itemName]) का प्रयास किया था। (रिटर्न) अपेक्षित;'? सुनिश्चित नहीं है कि यह आपकी स्थिति (COM) में काम करता है (क्या सी # और .NET संस्करण?), लेकिन बहुत बेहतर दिखता है। –