c# - स्थिर तरीकों के साथ नकली कैसे करें?




.net mocking (5)

आप शायद एक गहराई से शुरुआती बिंदु पर परीक्षण करने का प्रयास कर रहे हों। प्रत्येक पद्धति को व्यक्तिगत रूप से परीक्षण करने के लिए एक परीक्षण की आवश्यकता नहीं होती है; निजी और स्थिर तरीके सार्वजनिक विधियों को कॉल करके परीक्षण किया जाना चाहिए, जो फिर निजी और स्थिर लोगों को बदले में कहते हैं।

तो कहें कि आपका कोड ऐसा है:

public object GetData()
{
 object obj1 = GetDataFromWherever();
 object obj2 = TransformData(obj1);
 return obj2;
} 
private static object TransformData(object obj)
{
//Do whatever
}

आपको ट्रांसफ़ॉर्मडेटा विधि के खिलाफ एक परीक्षण लिखने की आवश्यकता नहीं है (और आप नहीं कर सकते हैं)। बजाय GetData विधि के लिए एक परीक्षण लिखो जो ट्रांसफॉर्मडेटा में किए गए कार्य की जांच करता है।

मैं ऑब्जेक्ट्स को नकली करने के लिए नया हूँ, लेकिन मैं समझता हूं कि मुझे अपने कक्षाओं को नकली बनाने के लिए इंटरफेस लागू करने की आवश्यकता है।

मुझे जो समस्या आ रही है वह है कि मेरे डेटा एक्सेस परत में, मुझे स्थिर तरीके होना है, लेकिन मैं एक अंतरफलक में एक स्थिर विधि नहीं डाल सकता।

इस के आसपास सबसे अच्छा तरीका क्या है? क्या मैं बस उदाहरण तरीकों का उपयोग करना चाहिए (जो गलत लगता है) या कोई दूसरा समाधान है?


उदाहरण के तरीकों का प्रयोग करें जहां संभव हो।

सार्वजनिक स्थैतिक फ़ंक [टी, यू] (स्थिर फ़ंक्शन संदर्भों को नकली फ़ंक्शन के लिए प्रतिस्थापित किया जा सकता है) का उपयोग करें, जहां उदाहरण के तरीकों संभव नहीं हैं।


हां, आप उदाहरण विधियों का उपयोग करते हैं स्थिर तरीके मूलतः कहते हैं, "इस कार्यशीलता को पूरा करने का एक तरीका है - यह बहुरूपिक नहीं है।" मॉलिंग बहुरूपता पर निर्भर करता है

अब, यदि आपका स्थिर तरीके तार्किक रूप से आपके द्वारा उपयोग किए जा रहे कार्यान्वयन के बारे में परवाह नहीं करते हैं, तो वे इंटरफेस पैरामीटर के रूप में ले सकते हैं, या शायद राज्य के साथ इंटरैक्ट किए बिना काम कर सकते हैं - लेकिन अन्यथा आपको उदाहरणों का उपयोग करना चाहिए (और शायद निर्भरता इंजेक्शन सब कुछ एक साथ तार करने के लिए)


आपके पास समस्या है जब आप 3 पार्टी कोड का उपयोग कर रहे हैं और इसे आपके किसी एक तरीके से कहा जाता है हम जो कर रहे हैं वह एक ऑब्जेक्ट में लपेटकर है, और इसे डिप्टी इंजेक्शन के साथ पास करने के लिए बुला रहा है, और फिर आपका यूनिट टेस्ट 3 पार्टी स्टैटिक पद्धति का नकल कर सकता है जिसे इसके साथ सेटर कहते हैं।


मैं एक विधि वस्तु पैटर्न का उपयोग करेगा। इसका एक स्थिर उदाहरण है, और इसे स्थिर विधि में कहते हैं। आपके मजाकिया ढांचे के आधार पर परीक्षण के लिए उप-वर्ग होना संभव है।

यानी आपकी कक्षा में स्थिर विधि के साथ:

private static final MethodObject methodObject = new MethodObject();

public static void doSomething(){
    methodObject.doSomething();
}

और आपकी विधि ऑब्जेक्ट एक बहुत सरल, आसानी से परीक्षण किया जा सकता है:

public class MethodObject {
    public void doSomething() {
        // do your thang
    }
}






static-methods