2009-12-01 16 views
7

मजाक मैं एक स्थिर वर्ग कि winspool से कुछ देशी तरीकों लपेटता है:एक स्टेटिक कक्षा

public static class WinSpool 
{ 
    [DllImport("winspool.drv")] 
    public static extern int OpenPrinter(string pPrinterName, out IntPtr phPrinter, IntPtr pDefault); 
    ... 
    //some more methods here 
} 

मैं इकाई परीक्षण के लिए उन्हें नकली चाहते हैं, लेकिन इस के लिए एक पैटर्न नहीं पा सके। (क्या हर कोई स्थैतिक कक्षाओं से बचता है?)

उत्तर

10

हां, स्थिर वर्ग आमतौर पर frowned upon in the field of unit testing and mocking है। AFAIK नहीं खुला स्रोत मजाक ढांचे (जैसे Rhino Mocks)

मजाक आप पूरी तरह और सकारात्मक स्थिर वर्ग नकली चाहिए, तो मुझे डर है कि आप Typemock के लिए जाना चाहिए, जो स्वतंत्र नहीं है स्थिर वर्ग समर्थन करते हैं।

+6

मुझे यह विडंबनापूर्ण लगता है कि कैसे स्थिर सदस्य "फंसे हुए" हैं, जब हमें वास्तव में जो फहराया जाना चाहिए, वे ढांचे को मजाक कर रहे हैं जो स्थिर सदस्यों का नकल नहीं कर सकते हैं। आखिरकार, यदि टाइपमैक ऐसा कर सकता है, तो ओएसएस ढांचे क्यों नहीं कर सकते हैं? –

+1

इसका कारण यह है कि सबसे मजाक करने वाले ढांचे प्रॉक्सी पैटर्न का उपयोग करके मैक्स को लागू करते हैं, जो अनिवार्य रूप से विरासत की आवश्यकता होती है, और निश्चित रूप से स्थिर वर्गों को विरासत में नहीं लिया जा सकता है। आईपी ​​इंजेक्शन के साथ विधि कॉल को पुनर्निर्देशित करके टाइपपेक एक पूरी तरह से अलग दृष्टिकोण का उपयोग करता है, जो इसे स्थिर कॉलों का नकल करने की शक्ति देता है। – womp

+6

क्योंकि यह * मुफ्त में विकसित होने के लिए बहुत महंगा है * (http://stackoverflow.com/questions/1534119/is-there-any-open-source-mocking-framework-resembling-typemock) – Graviton

2

माइक्रोसॉफ्ट ने विजुअल स्टूडियो 2012 अल्टीमेट के लिए एक नकली ढांचा तैयार किया है जो शिमों का उपयोग करके स्थिर प्रकारों को मजाक करने की अनुमति देता है। शिम्स "फर्जी" असेंबली हैं जो सभी बाहरी रूप से सुलभ तरीकों के लिए प्रतिनिधि प्रदान करते हैं। कॉल को ईवेंट फ़िल्टर के माध्यम से रूट किया जाता है, और जहां भी परीक्षण ने अपने प्रतिनिधि में से एक स्थापित किया है, प्रतिनिधि कॉल को संभालता है। ऐसा नहीं है कि कोई भी स्थैतिक प्रकार को प्रोत्साहित करना चाहता है जो निर्भरता इंजेक्शन के माध्यम से नहीं संभाला जाता है। पसंदीदा दिशा निर्देशों की आवश्यकता के लिए और डीआई का उपयोग कर स्टब्स के उपयोग की ओर बढ़ना है।

संबंधित मुद्दे