मैंने कुछ ऐसी पुरानी और विरासत परियोजनाओं में से एक का सामना किया, जिसमें मैंने काम किया, जिसमें कोई इंटरफेस या सर्वश्रेष्ठ अभ्यास नहीं है और यह भी कि उन्हें फिर से चीजों को लागू करने या कोड को फिर से लागू करने के लिए बहुत मुश्किल है, क्योंकि परियोजना व्यवसाय की परिपक्वता के कारण, इसलिए अपने यूनिटटेस्ट प्रोजेक्ट में, मैं उन वर्गों पर एक रैपर तैयार करता था, जिन्हें मैं मॉक करना चाहता हूं और वह आवरण लागू करने वाला इंटरफ़ेस, जिसमें मेरी सभी आवश्यक विधियां शामिल हैं जिन्हें मैं सेटअप करना चाहता हूं और उनके साथ काम करना चाहता हूं, अब मैं वास्तविक वर्ग के बजाय रैपर को मॉक कर सकता हूं।
उदाहरण के लिए:
वह सेवा जिसका आप परीक्षण करना चाहते हैं जिसमें आभासी विधियाँ नहीं हैं या इंटरफ़ेस लागू नहीं है
public class ServiceA{
public void A(){}
public String B(){}
}
लहराने के लिए moq
public class ServiceAWrapper : IServiceAWrapper{
public void A(){}
public String B(){}
}
रैपर इंटरफ़ेस
public interface IServiceAWrapper{
void A();
String B();
}
यूनिट टेस्ट में अब आप रैपर का मजाक उड़ा सकते हैं:
public void A_Run_ChangeStateOfX()
{
var moq = new Mock<IServiceAWrapper>();
moq.Setup(...);
}
यह सबसे अच्छा अभ्यास नहीं हो सकता है, लेकिन यदि आपका प्रोजेक्ट नियम आपको इस तरह से मजबूर करता है, तो इसे करें। अपने यूनिट टेस्ट प्रोजेक्ट या हेल्पर प्रोजेक्ट के अंदर ही अपने सभी रैपर को यूनिट परीक्षणों के लिए निर्दिष्ट करें ताकि अनावश्यक रैपर या एडेप्टर के साथ प्रोजेक्ट को अधिभार न डालें।
अद्यतन:
एक वर्ष से अधिक समय से यह उत्तर लेकिन इस वर्ष में मुझे विभिन्न समाधानों के साथ समान परिदृश्यों का सामना करना पड़ा। उदाहरण के लिए, नकली, नकली और स्टब्स बनाने के लिए माइक्रोसॉफ्ट फेक फ्रेमवर्क का उपयोग करना इतना आसान है और बिना किसी इंटरफेस के निजी और संरक्षित तरीकों का भी परीक्षण कर सकते हैं। आप इसे पढ़ सकते हैं: https://docs.microsoft.com/en-us/visualstudio/test/isolating-code-under-test-with-microsoft-fakes?view=vs-2017