दिलचस्प पोस्ट
कैसे अनुकूलित करें <input type = "file">? जावास्क्रिप्ट अपवाद स्टैक ट्रेस कैसे तय चौड़ाई के साथ एचटीएमएल बटन का पाठ लपेटा ग्रेडल – निर्भरता का नवीनतम रिलीज संस्करण प्राप्त करना हम एक स्थिर विधि में 'इस' कीवर्ड का उपयोग क्यों नहीं कर सकते? क्या स्थानीय कार्य घोषणाओं के लिए कोई फायदा है? iScroll 4 फॉर्म <select> element iPhone Safari और Android ब्राउज़र के साथ काम नहीं कर रहा है "AJAX" का उपयोग करके CSV फ़ाइल डाउनलोड करें किसी संख्या के विभाजन उत्पन्न करना जावा के साथ सेलेनियम वेबड्रायवर का उपयोग कर HTTP प्रतिक्रिया कोड कैसे प्राप्त करें? SQL में हेक्स में एक स्ट्रिंग परिवर्तित करना d3.js संक्रमण अंत घटना @ सूयेपापरम में एक सूची बाध्यकारी JSON रिटर्न के साथ PHP स्क्रिप्ट के लिए jQuery AJAX कॉल Angular2 में वस्तुओं की एक सरणी पर चयन / विकल्प / NgFor का उपयोग कैसे करें

आप यूनिट परीक्षण के लिए सी # में फ़ाइल सिस्टम कैसे बना सकते हैं?

क्या यूनिट परीक्षण लिखने के लिए फ़ाइल सिस्टम को सी # में नकल करने के लिए कोई लाइब्रेरी या विधियां हैं? मेरे वर्तमान मामले में मेरे पास ऐसे तरीकों हैं जो यह जांचते हैं कि कुछ फ़ाइल मौजूद है या निर्माण तिथि पढ़ रही है या नहीं। मुझे भविष्य में उससे अधिक की आवश्यकता हो सकती है।

Solutions Collecting From Web of "आप यूनिट परीक्षण के लिए सी # में फ़ाइल सिस्टम कैसे बना सकते हैं?"

संपादित करें: NuGet पैकेज सिस्टम स्थापित करें। आईओ। एब्स्ट्रैक्शन

जब यह जवाब मूल रूप से स्वीकार किया गया था, तो यह पैकेज मौजूद नहीं था। मूल उत्तर नीचे ऐतिहासिक संदर्भ के लिए प्रदान किया गया है:

आप इसे एक इंटरफ़ेस बनाकर कर सकते हैं:

interface IFileSystem { bool FileExists(string fileName); DateTime GetCreationDate(string fileName); } 

और 'वास्तविक' क्रियान्वयन का निर्माण करना जो कि system.IO.File.Exists () इत्यादि का उपयोग करता है। फिर आप एक इंटरफ़ेस का उपयोग मॉकिंग ढांचे का उपयोग कर सकते हैं; मैं Moq की सलाह देते हैं

संपादित करें: किसी ने यह किया है और कृपया इसे यहां ऑनलाइन पोस्ट किया है ।

मैंने आईसीलॉक इंटरफ़ेस (वास्तव में हमारे समय के प्रवाह को नियंत्रित करने में सक्षम होने के लिए वास्तव में बहुत उपयोगी!), और परंपरागत रूप से, एक ISqlDataAccess इंटरफ़ेस में DateTime.UtcNow को नकली करने के लिए इस दृष्टिकोण का उपयोग किया है।

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

आप यह भी स्वीकार भी कर सकते हैं कि निश्चित विधियां इकाई परीक्षण योग्य नहीं हैं और उन्हें एक अलग धीमी गति से चलने वाले एकीकरण / सिस्टम परीक्षण सूट में परीक्षण कर सकते हैं।

इंस्टॉल-पैकेज सिस्टम। आईओ। एब्स्ट्रैक्शन

यह काल्पनिक लाइब्रेरी अब मौजूद है, सिस्टम. IO.Abstractions के लिए एक NuGet पैकेज है, जो सिस्टम.IO नामस्थान को दूर करता है।

टेस्ट हेल्पर्स का भी एक सेट है, सिस्टम.आईओ। एब्स्ट्रैक्शन। टेस्टिंग हेल्पर जो – लेखन के समय – केवल आंशिक रूप से लागू होता है, लेकिन यह एक बहुत अच्छा प्रारंभिक बिंदु है।

संभवत: आपको फ़ाइल सिस्टम से कौन सी चीज़ों की आवश्यकता है, इसे परिभाषित करने के लिए एक अनुबंध तैयार करना होगा और फिर उन फ़ंक्शनलिटी के आसपास आवरण लिखें। उस समय आप कार्यान्वयन को नकली या ठूंठ करने में सक्षम होंगे।

उदाहरण:

 interface IFileWrapper { bool Exists(String filePath); } class FileWrapper: IFileWrapper { bool Exists(String filePath) { return File.Exists(filePath); } } class FileWrapperStub: IFileWrapper { bool Exists(String filePath) { return (filePath == @"C:\myfilerocks.txt"); } } 

मेरी सिफारिश http://systemwrapper.codeplex.com/ का उपयोग करना है क्योंकि यह सिस्टम नेमस्पेस में अधिकतर प्रयुक्त प्रकारों के लिए रैपर प्रदान करता है

मैं निम्नलिखित समाधानों में इस पर आया हूं:

  • एकीकरण परीक्षण लिखें, इकाई परीक्षण नहीं। काम करने के लिए आपको एक ऐसा फ़ोल्डर बनाने का एक सरल तरीका चाहिए जहां आप अन्य परीक्षणों के दखल के बारे में चिंता किए बिना सामान डंप कर सकते हैं मेरे पास एक साधारण टेस्टफ़ोल्डर वर्ग है जो उपयोग करने के लिए एक अद्वितीय प्रति परीक्षण विधि फ़ोल्डर बना सकता है।
  • एक नकली प्रणाली लिखें। आईओ। फाइल यह एक IFile.cs बना रहा है मैं इसे अक्सर परीक्षणों के साथ समाप्त होता है जो बस साबित करते हैं कि आप मजाक का बयान लिख सकते हैं, लेकिन IO का उपयोग छोटा होने पर इसका उपयोग करें।
  • आप अमूर्त की परत की जांच करें, और क्लास से फ़ाइल IO निकालें। इस के लिए एक इंटरफ़ेस बनाएँ शेष उपयोग एकीकरण परीक्षण (लेकिन यह बहुत छोटा होगा)। यह फ़ाइल बनाने के बजाय इसके ऊपर से अलग है। आप आशय लिखिए, कहते हैं कि ioThingie.loadSettings ()
  • System.IO.Abstractions मैंने अभी तक इस का उपयोग नहीं किया है, लेकिन यह वह है जो मैं खेल के बारे में बहुत उत्साहित हूं।

मैं जो लिख रहा हूं उसके आधार पर, ऊपर की सभी विधियों का उपयोग करना समाप्त होता है I लेकिन जब तक मैं यूनिट परीक्षणों को लिखता हूं जो IO को दबाते हैं, तब तक मैं सोच-विचार शुरू कर रहा हूं।

फ़ाइल सिस्टम को परीक्षण में नकल करना मुश्किल होगा क्योंकि .NET फ़ाइल एपीआई वास्तव में इंटरफेस या एक्स्टेंसिबल वर्गों पर आधारित नहीं हैं जो मस्त हो सकती हैं।

हालांकि, अगर आपके पास फ़ाइल सिस्टम तक पहुंचने के लिए अपनी फ़ंक्शनल परत है, तो आप नकल कर सकते हैं कि एक यूनिट परीक्षण में।

मजाक के विकल्प के रूप में, बस अपने परीक्षण सेटअप के हिस्से के रूप में आवश्यक फ़ोल्डरों और फ़ाइलों को बनाने और उन्हें अपनी टीडाउन पद्धति में हटाने पर विचार करें।

मुझे यकीन नहीं है कि आप फ़ाइल सिस्टम को कैसे मचाना चाहते हैं आप क्या कर सकते हैं एक परीक्षण स्थिरता सेटअप लिखते हैं जो परीक्षण के लिए आवश्यक संरचना के साथ एक फ़ोल्डर आदि बनाता है। परीक्षण चलाने के बाद एक टीडाउन पद्धति साफ हो जाएगी।

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

अपने विशिष्ट प्रश्न का उत्तर देने के लिए: नहीं, कोई लाइब्रेरी नहीं है जो आपको फ़ाइल I / O कॉलों का नकली करने की अनुमति देगा (जो मुझे पता है)। इसका अर्थ यह है कि आपके प्रकारों को "ठीक" इकाई परीक्षण करने की आवश्यकता होगी कि जब आप अपने प्रकार को परिभाषित करते हैं तो आप इस प्रतिबंध को ध्यान में रखते हैं

त्वरित पक्ष नोट के बारे में कैसे मैं "उचित" इकाई परीक्षण को परिभाषित करता हूं मेरा मानना ​​है कि यूनिट परीक्षणों से यह पुष्टि करनी चाहिए कि आपको अपेक्षित उत्पादन मिलता है (हो सकता है कि कोई अपवाद, विधि पर कॉल करें, आदि) ज्ञात निविष्टियाँ प्रदान की गईं यह आपको इनपुट और / या इनपुट राज्यों के एक सेट के रूप में अपनी यूनिट परीक्षण शर्तों को सेट करने की अनुमति देता है। मैंने ऐसा करने का सबसे अच्छा तरीका इंटरफ़ेस-आधारित सेवाओं और निर्भरता इंजेक्शन का उपयोग कर रहा है ताकि एक कंट्रोलर या प्रॉपर्टी के माध्यम से पारित किया जाने वाला इंटरफ़ेस के माध्यम से एक प्रकार की प्रत्येक जिम्मेदारी प्रदान की जा सके।

इसलिए, इसे ध्यान में रखते हुए, अपने प्रश्न पर वापस जाएं। मैंने FileSystemService कार्यान्वयन के साथ IFileSystemService इंटरफ़ेस बनाकर फ़ाइल सिस्टम कॉल का मज़ाक उड़ाया है जो बस mscorlib फ़ाइल सिस्टम विधियों पर एक मुखौटा है। मेरा कोड तब IFileSystemService का उपयोग करता है, बजाय mscorlib प्रकार। यह मेरे मानक FileSystemService में प्लग करने की अनुमति देता है जब अनुप्रयोग चल रहा है या IFileSystemService को मेरी यूनिट परीक्षणों में IFileSystemService है। एप्लिकेशन कोड एक ही है, चाहे वह कैसे चल रहा है, परन्तु अंतर्निहित संरचना से कोड को आसानी से जांचने की सुविधा मिलती है।

मैं मानता हूँ कि यह एमएससीरलिब फ़ाइल सिस्टम ऑब्जेक्ट्स के आसपास आवरण का उपयोग करने के लिए एक दर्द है, लेकिन इन विशिष्ट परिदृश्यों में, यह अतिरिक्त कार्य के लायक है क्योंकि परीक्षण इतना आसान और अधिक विश्वसनीय हो जाता है

इंटरफ़ेस बनाना और परीक्षण के लिए इसका मजाक उड़ाका जाने का सबसे साफ रास्ता है। हालांकि, वैकल्पिक रूप से आप माइक्रोसॉफ्ट मोल्स फ्रेमवर्क पर नजर डाल सकते हैं।

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

सी # के लिए इसी तरह की एपीआई मौजूद है: एनआई.व्वेट्स जो अपाचे वीएफएस वी 1 के समान है। इसमें स्थानीय फाइल सिस्टम और इन-मेमरी फाइल सिस्टम दोनों के लिए डिफ़ॉल्ट रूप से लागू होते हैं (पिछले एक को बॉक्स से यूनिट परीक्षणों में इस्तेमाल किया जा सकता है)।

मैं जेमी आइडिया की प्रतिक्रिया के साथ जाना होगा उन चीजों का मजाक न करें जो आपने नहीं लिखी हैं। सभी तरह की निर्भरताएं जिन्हें आप नहीं जानते हैं – सील किए गए कक्षाएं, गैर आभासी विधियां आदि।

एक और तरीका है कि नकली तरीकों के साथ एपोपियाट विधियों को लपेटें। उदाहरण के लिए, एक फ़ाइल क्लाउड बनाएँ जो कि फ़ाइल के तरीकों तक पहुंच की अनुमति देता है, लेकिन आप जिस चीज़ से नकली हो सकते हैं

हम वर्तमान में एक मालिकाना डेटा इंजन का उपयोग करते हैं और इसकी एपीआई इंटरफेस के रूप में सामने नहीं आती है इसलिए हम अपने डेटा एक्सेस कोड का परीक्षण कर सकते हैं। तो मैं मैट और यूसुफ के दृष्टिकोण के साथ भी गया