मैं विधियों के इंटरफ़ेस के साथ जोड़ा गया Moq का उपयोग कर रहा हूं। मुझे यह जांचने की ज़रूरत है कि इस इंटरफ़ेस में विधियों को एक निश्चित अनुक्रम में निष्पादित किया गया है साथ ही प्रत्येक के लिए एक निश्चित संख्या में निष्पादित किया गया है।मॉकिंग विधि निष्पादन टाइम्स और अनुक्रम
इंटरफ़ेस
public interface IInterface
{
void MethodOne(string foo);
void MethodTwo(string foo);
}
विधि
// MyClass stuff ...
public async Task Run()
{
MethodOne("foo");
MethodTwo("foo");
}
// ...
टेस्ट
मैं यह सत्यापित करने के तरीकों को (एक बार) समय की एक निश्चित राशि क्रियान्वित कर रहे हैं इस परीक्षण में लिखा है:
[TestMethod]
public async Task Test()
{
var mock = new Mock<IInterface>();
var mockSequence = new MockSequence();
var obj = new MyClass();
await obj.Run();
mock.Verify(i=> i.MethodOne("foo"), Times.Once());
mock.Verify(i=> i.MethodTwo("foo"), Times.Once());
}
यह ठीक काम करता है ...
मैंने एक निश्चित अनुक्रम निर्धारित करने के लिए इन परीक्षणों का सही प्रयास किया है, लेकिन परीक्षण हमेशा पास होता है।
[TestMethod]
public async Task Test()
{
var mock = new Mock<IInterface>();
var mockSequence = new MockSequence();
var obj = new MyClass();
await obj.Run();
mock.InSequence(mockSequence).Setup(i => i.MethodOne("foo"));
mock.InSequence(mockSequence).Setup(i => i.MethodTwo("foo"));
}
पारित करना चाहिए, और है ...
[TestMethod]
public async Task Test()
{
var mock = new Mock<IInterface>();
var mockSequence = new MockSequence();
var obj = new MyClass();
await obj.Run();
mock.InSequence(mockSequence).Setup(i => i.MethodTwo("foo")); // swapped order here
mock.InSequence(mockSequence).Setup(i => i.MethodOne("foo"));
}
पारित नहीं करना चाहिए, लेकिन है ...
- क्या मैं उचित अनुक्रम सत्यापित करने के लिए अलग तरह से करने की जरूरत पूरी की जाती है कर ?
- मैं दोनों को कैसे जोड़ूं ताकि मैं निष्पादन समय और उचित अनुक्रम की संख्या का परीक्षण कर सकूं?
मैंने इसे डुप्लिकेट के रूप में चिह्नित किया क्योंकि दोनों प्रश्न एक ही मुद्दे को संदर्भित करते हैं। यदि वे नहीं करते हैं, तो मुझे बताएं और मैं फिर से खोलने के लिए वोट दूंगा। – dcastro
मैंने यह पूछने से पहले उस प्रश्न को पढ़ा। उस सवाल को एक उत्तर के साथ हल किया गया था जिसमें कहा गया था कि यह मोक में एक बग था। वह 3 साल पहले था ... मुझे लगता है कि यह अभी भी एक बग नहीं है। – kspearrin
मैंने प्रश्न – dcastro