मैं C # में इकाई परीक्षण के लिए काफी नया हूं और Moq का उपयोग करना सीख रहा हूं। नीचे वह वर्ग है जिसे मैं परखने की कोशिश कर रहा हूं।
class MyClass
{
SomeClass someClass;
public MyClass(SomeClass someClass)
{
this.someClass = someClass;
}
public void MyMethod(string method)
{
method = "test"
someClass.DoSomething(method);
}
}
class Someclass
{
public DoSomething(string method)
{
// do something...
}
}
नीचे मेरा TestClass है:
class MyClassTest
{
[TestMethod()]
public void MyMethodTest()
{
string action="test";
Mock<SomeClass> mockSomeClass = new Mock<SomeClass>();
mockSomeClass.SetUp(a => a.DoSomething(action));
MyClass myClass = new MyClass(mockSomeClass.Object);
myClass.MyMethod(action);
mockSomeClass.Verify(v => v.DoSomething(It.IsAny<string>()));
}
}
मुझे निम्न अपवाद मिले:
Expected invocation on the mock at least once, but was never performed
No setups configured.
No invocations performed..
मैं सिर्फ यह सत्यापित करना चाहता हूं कि क्या विधि "MyMethod" को बुलाया जा रहा है या नहीं। क्या मैं कुछ भूल रहा हूँ?
क्षमा करें .. मैंने अपना प्रश्न संपादित किया ..
—
user591410
आप सही रास्ते पर हैं, लेकिन पोस्ट किए गए कोड में बग हैं। यह संकलित नहीं करेगा - Someclass पर आवरण, DoSomething पर शून्य वापसी। उसके बाद आपको सार्वजनिक पहुंच की आवश्यकता है, फिर DoSomething वर्चुअल करें। संक्षेप में, आपके पास अपने उत्पादन कोड में भी एक बग है।
—
ट्रूविल
आपके प्रतिक्रिया के लिए धन्येवाद। मैं नकली विधि सेट करते समय तर्क गलत कर रहा था ..
—
user591410
"कोई सेटअप कॉन्फ़िगर नहीं किया गया है।" भ्रामक हो सकता है। आपको उन तरीकों के लिए एक व्यवहार सेटअप करने की आवश्यकता नहीं है जिन्हें कहा जाएगा। और यह भी याद रखें कि "सत्यापित करें" विधि को निष्पादित करने के लिए जिस विधि का आप परीक्षण कर रहे हैं उसे बुलाया जाना चाहिए (इसलिए यह आपके मामले में ठीक है)।
—
स्यालु
SomeClass
यह परिभाषा नहीं है, तो यह संकलित नहीं करेगा किMyMethod(string)
यह कैसा दिखता है।