क्यों?
पहले हम यह निर्धारित करने की कोशिश करेंगे कि Microsoft किस उद्देश्य से है। हमारा उद्देश्य क्या है और हम इससे क्या हासिल कर सकते हैं:
- बाहरी वातावरण से परीक्षण किए गए तर्क का पूर्ण अलगाव।
- जल्दी और आसानी से इकाई परीक्षण बनाने की क्षमता, और वर्ग के तर्क का परीक्षण करना संभव हो जाता है, भले ही उन वर्गों का कार्यान्वयन न हो, जिनके उपयोगकर्ता का परीक्षण किया गया वर्ग है।
- परीक्षण डेटा सेट को व्यवस्थित करना या परीक्षण की स्थिति बनाने के लिए संबंधित वस्तुओं की स्थिति का अनुकरण करना आसान हो जाता है
- कई बार, यूनिट परीक्षण निष्पादन समय कम हो जाता है, परीक्षणों का लगातार लॉन्च वास्तविक हो जाता है
- यूनिट लॉजिक का उल्लंघन सैकड़ों या दो परीक्षणों के पतन का कारण नहीं बनता है जो इसे परीक्षण के लिए डिज़ाइन नहीं किया गया है
- जटिल वर्कफ़्लो के साथ सुविधाजनक विधि परीक्षण
सामान्य रूप में इकाई परीक्षण के बारे में
यदि आपको संदेह में उपरोक्त लक्ष्य हैं, तो इकाई परीक्षण के मुख्य बिंदुओं की स्मृति में यह थोड़ा ताज़ा है। जिन लोगों को कोई संदेह नहीं है - आप अगले अनुभाग पर जा सकते हैं।
इकाई परीक्षण किसके लिए है?
- व्यक्तिगत कार्यक्रम इकाइयों को अलग करें और दिखाएं कि व्यक्तिगत रूप से एक इकाई (या कई इकाइयों का एक सेट) चालू है।
- इकाइयों के तर्क का दस्तावेजीकरण - यह समझने के लिए कि एक इकाई कैसे कार्य करती है - बस इसके परीक्षणों के कोड को पढ़ें।
- रीफैक्टरिंग का सरलीकरण - आप आसानी से यह सत्यापित कर सकते हैं कि परिवर्तन करने के बाद कोड त्रुटियों के बिना काम करता है।
- विकास प्रक्रिया में अधिकांश त्रुटियों के सुधार के कारण बगफिक्स समय को कम करना। प्रतिगमन की संभावना को कम करना।
यूनिट टेस्ट आवश्यकताएँ
- एक परीक्षण को कक्षा कोड की न्यूनतम मात्रा का परीक्षण करना चाहिए, और किसी दिए गए कोड के लिए परीक्षणों की संख्या कोड निष्पादन पथों की संख्या के लिए आनुपातिक होनी चाहिए।
- परीक्षण का कार्यान्वयन यथासंभव सरल होना चाहिए और परीक्षण के बाहर परीक्षण के माहौल को शुरू करने की आवश्यकता नहीं होनी चाहिए (उदाहरण के लिए, डेटाबेस में परीक्षण डेटा की तैयारी)।
- परीक्षण को स्व-दस्तावेजीकरण होना चाहिए - एक बाहरी डेवलपर को इस इकाई के लिए लागू परीक्षणों को पढ़कर इकाई के तर्क को समझना चाहिए। डेटाबेस या परीक्षण डेटा के अन्य स्रोतों की सामग्री की जांच करने की आवश्यकता के बिना
- परीक्षण जितना संभव हो उतना सरल होना चाहिए - इन सभी परीक्षण मामलों का परीक्षण करने वाले एक परीक्षण की तुलना में प्रत्येक व्यक्तिगत परीक्षण मामले के लिए लागू किए गए दर्जन भर सरल परीक्षणों को समझना बहुत आसान है।
- परीक्षण का पतन तर्क से संबंधित नहीं होना चाहिए, जिसके लिए यह इरादा नहीं है
- परीक्षण बाहरी सिस्टम (डेटाबेस सर्वर, वेब सर्वर, फाइल सिस्टम, बाहरी डिवाइस नियंत्रक) पर निर्भर नहीं होना चाहिए, अगर यह इन प्रणालियों के साथ बातचीत का परीक्षण करने के लिए डिज़ाइन नहीं किया गया है।
- न्यूनतम निष्पादन समय की आवश्यकता वाले परीक्षणों के साथ अधिकतम कोड कवरेज
यूनिट परीक्षणों का उपयोग करते समय क्या समस्याएं आती हैं
- एक परीक्षण वातावरण तैयार करने में कठिनाइयाँ - बड़े परीक्षण डेटा सेट बनाना, सर्वर से विभिन्न कनेक्शन बनाना, कॉन्फ़िगरेशन फ़ाइलों का वर्णन, बाहरी उपकरणों के एमुलेटर बनाने की आवश्यकता आदि।
- एक विशेष वर्ग के परीक्षण की जटिलता, क्योंकि अक्सर वर्ग अन्य कक्षाओं का एक उपयोगकर्ता होता है, और उनके काम में त्रुटियों की उपस्थिति परीक्षण में एक गिरावट की ओर इशारा करती है, जो इकाई परीक्षण प्रतिमान के अनुरूप नहीं है - परीक्षण किए गए तर्क का उल्लंघन होने पर परीक्षण गिरना चाहिए।
- परीक्षणों के साथ कोड का 100% कवरेज प्रदान करने की कठिनाई (एक नियम के रूप में, यह डेवलपर की आलस्य और पहली दो समस्याओं के कारण है)
- पहले दो कारणों से आने वाले परीक्षणों को बनाए रखने (डिबगिंग, फिक्सिंग) की जटिलता।
- कक्षाओं के छिपे हुए सदस्यों तक पहुंच (प्रतिबिंब को छोड़कर), परीक्षण मूल्यों के साथ आसानी से प्रारंभ करने में असमर्थता।
- अक्सर, परीक्षण गिरावट इस तथ्य के कारण होती है कि किसी अन्य इकाई के तर्क (और परीक्षण नहीं किए गए) का उल्लंघन किया गया था। आपको गलत स्थानों पर त्रुटियों की तलाश में समय बिताना होगा।
- परीक्षण निष्पादन समय - इकाई परीक्षणों के लिए मुख्य आवश्यकता उनका लगातार निष्पादन है - (इकाई में बदलाव किया है, परीक्षणों को चलाई), लेकिन अक्सर ऐसा करना असंभव है क्योंकि परीक्षण बहुत लंबे समय तक चलते हैं, बड़ी परियोजनाओं के लिए इस समय को घंटों में मापा जा सकता है। अधिकांश समय ऐसी प्रक्रियाओं पर बिताया जाता है जो सीधे-सीधे डेटाबेस के परीक्षण / लेखन, फाइल सिस्टम, वेब सर्वर आदि से संबंधित नहीं है, जो संबद्ध तर्क का प्रारंभ है, जो सीधे परीक्षण से संबंधित नहीं है।
यूनिट टेस्टिंग टूलकिट।
फिलहाल, विभिन्न प्रयोजनों (यूनिट टेस्ट, इंटीग्रेशन टेस्ट, फ़ंक्शनल टेस्ट, यूआई टेस्ट) के लिए स्वचालित परीक्षण बनाने और उपयोग करने के लिए डिज़ाइन की गई कई प्रोग्रामिंग भाषाओं के लिए बड़ी संख्या में चौखटे (NUnit, JUnit, DUnit, xUnit, MSTest) मौजूद हैं। एक नियम के रूप में, वे पूर्ण इकाई परीक्षणों को शुद्ध रूप में बनाने की अनुमति नहीं देते हैं, क्योंकि वे आसपास के तर्क से परीक्षण किए गए कोड का पूर्ण अलगाव सुनिश्चित नहीं कर सकते हैं। डेवलपर्स को विभिन्न ट्रिकों का सहारा लेना पड़ता है, अतिरिक्त मॉक कक्षाओं का एक बादल बनाना, प्रतिबिंब का उपयोग करना, और इसी तरह। और यहां अलगाव फ्रेमवर्क बचाव के लिए आते हैं, जो आपको सुविधा और जल्दी से पर्याप्त करने की अनुमति देते हैं, यूनिट परीक्षणों के लिए एक अलग वातावरण का आयोजन करते हैं, और Microsoft मोल्स उनमें से एक है।
Microsoft.Moles क्या कर सकते हैं?
मैं उन संभावनाओं को प्रदर्शित करने का प्रयास करूंगा जो मोल्स हमें एक उदाहरण प्रदान करता है (मैंने इसे यथासंभव सरल लेकिन इतना कठिन बनाने की कोशिश की कि इसमें मोल्स का उपयोग करना उचित था)।
मान लें कि हमारे पास FileUpdater वर्ग है, एकमात्र UpdateFileFromService (string fileId) विधि के साथ, जिसका कार्य स्थानीय संग्रहण में डाउनलोड की गई फ़ाइल के साथ स्थानीय संग्रहण में फ़ाइल को अद्यतन करना है, यदि स्थानीय और दूरस्थ फ़ाइल hasha मेल नहीं खाते हैं।
जैसा कि आप लिस्टिंग से देख सकते हैं, UpdateFileFromService विधि स्थानीय और दूरस्थ रिपॉजिटरी तक पहुंचने के लिए FileManager और StorageService कक्षाओं का उपयोग करती है। मैं जानबूझकर FileManager और StorageService कक्षाओं के तरीकों के कार्यान्वयन का हवाला नहीं देता, इसलिए हमें केवल उनके इंटरफ़ेस को जानना होगा।
public class FileUpdater
{
private StorageService storageService;
public StorageService Service
{
get
{
if (storageService == null )
{
storageService = new StorageService();
}
return storageService;
}
}
public void UpdateFileFromService( string fileId)
{
if ( string .IsNullOrEmpty(fileId))
{
throw new Exception( "fileId is empty" );
}
var fileManager = new FileManager();
string localFileHash = fileManager.GetFileHash(fileId);
string remoteFileHash = Service.GetFileHash(fileId);
if (localFileHash != remoteFileHash)
{
FileStream file = Service.DownloadFile(fileId);
fileManager.SaveFile(fileId, remoteFileHash, file);
}
}
}
public class FileManager
{
public string GetFileHash( string fileId)
{
throw new NotImplementedException();
}
public void SaveFile( string fileId, string remoteFileHash, FileStream file)
{
throw new NotImplementedException();
}
}
public class StorageService
{
public string GetFileHash( string fileId)
{
throw new NotImplementedException();
}
public FileStream DownloadFile( string fileId)
{
throw new NotImplementedException();
}
}
* This source code was highlighted with Source Code Highlighter .
UpdateFileFromService विधि के निम्नलिखित संस्करण स्पष्ट हैं :
- fileId - खाली स्ट्रिंग
- स्थानीय और दूरस्थ फ़ाइल हैश समान नहीं हैं
- स्थानीय और दूरस्थ फ़ाइल हैश समान हैं
आइए Microsoft.Moles का उपयोग करके विकल्पों 2 और 3 के लिए परीक्षण बनाने की कोशिश करें, क्योंकि किसी भी परीक्षण ढांचे के मानक उपकरण का उपयोग करके पहले मामले के लिए परीक्षण कार्यान्वयन प्राथमिक है।
मोल और स्टब क्लास जनरेशन
सबसे पहले, आपको पुस्तकालयों के लिए एक मोलेड असेंबली बनाने की आवश्यकता है जिसमें कक्षाएं शामिल हैं, जिनमें से तर्क हम कस्टम प्रतिनिधियों (अन्यथा स्टब विधियों) के साथ बदल देंगे। यह कमांड लाइन का उपयोग कर मोल। Exe का उपयोग करके किया जा सकता है, जो Microsoft.Moles के साथ स्थापना पैकेज में आता है, साथ ही साथ Visual Studio 2010/2010 इंटरफ़ेस के माध्यम से। हम दूसरी विधि का उपयोग करेंगे।
जैसा कि आप देख सकते हैं, Microsoft.Moles को स्थापित करने के बाद, संदर्भ असेंबलियों के लिए एक नया संदर्भ मेनू आइटम "ऐड मोल्स असेंबली" दिखाई दिया (चित्र 1)।

ClassLibrary1 असेंबली पर इस कमांड को निष्पादित करने के बाद, हमें ClassLibrary1.moles फ़ाइलों (छवि 2) का एक नया समूह मिलता है, जिसमें से ClassLibrary1.moles फ़ाइल मोलड असेंबली विवरणक है, जिसमें इसकी पीढ़ी के पैरामीटर शामिल हैं और यदि आवश्यक हो तो इसे बदला जा सकता है। बाकी फाइलें प्रत्येक बिल्ड पर स्वचालित रूप से पुनर्जीवित हो जाती हैं, और उन्हें संपादित करने का कोई मतलब नहीं है।

Microsoft.Moles आपको दो प्रकार के स्थानापन्न वर्गों का उपयोग करने की अनुमति देता है - स्टब्स और मोल्स।
- स्टब एक हल्का अलगाव ढांचा प्रदान करता है जो अमूर्त, आभासी तरीकों और सदस्य इंटरफेस के कार्यान्वयन को विफल करता है। आभासी तरीकों या सदस्यों को बिगाड़ने के लिए उपयुक्त है जो इंटरफेस के कार्यान्वयन हैं
- मोल एक शक्तिशाली कॉल रिडायरेक्शन फ्रेमवर्क का उपयोग करता है जो कोड प्रोफाइलर एपीआई का उपयोग करते हुए इस्तेमाल की गई कक्षाओं को कॉल को इंटरसेप्ट करता है, जो कॉल को एक नकली ऑब्जेक्ट पर रीडायरेक्ट करेगा। आपको कक्षा के किसी भी सदस्य को कॉल पुनर्निर्देशित करने की अनुमति देता है
असेंबली ClassLibrary1.Moles.dll उन सभी वर्गों के लिए M M क्लास ClassName% और S% ClassName% की डिफ़ॉल्ट जोड़ियों में शामिल है जो असेंबली ClassLibrary1.dll में शामिल हैं।
जहां:
- M% ClassName% - तिल वर्ग
- S% ClassName% - स्टब क्लास
यदि आप चाहें, तो ClassLibrary1.moles फ़ाइल में परिवर्तन करके, आप यह सुनिश्चित कर सकते हैं कि मोल्स या स्टब्स केवल कुछ वर्गों (जो पीढ़ी के समय को बहुत कम कर देंगे) के लिए उत्पन्न होते हैं, या आप मोल्स या स्टब्स की पीढ़ी को अक्षम कर सकते हैं यदि आप इसका उपयोग नहीं कर रहे हैं, साथ ही साथ अन्य सेट करें। पीढ़ी के मापदंडों (Intellisence आपको मान्य मापदंडों और उनके उद्देश्य की एक सूची बताएगा)। जब आप moles.exe कमांड लाइन का उपयोग कर जेनरेट कर रहे हैं तो आप ClassLibrary1.moles फ़ाइल का उपयोग कर सकते हैं (आप पैरामीटर के बिना moles.exe चलाकर moles.exe मापदंडों की सूची पा सकते हैं)।
तिल कक्षाओं का उपयोग करना
चूंकि मोल्स और स्टब्स का उपयोग कुछ समान है, और लेख Microsoft.Moles की सभी कार्यक्षमता का पूर्ण विवरण होने का दिखावा नहीं करता है - हम केवल मोल का उपयोग करने के उदाहरणों पर ध्यान देंगे।
उदाहरणों को और अधिक स्पष्ट करने के लिए, मैं तुरंत उत्पन्न तिल और स्टब वर्गों के सदस्यों के नामकरण की विशेषताओं पर ध्यान देता हूं - पहले मूल वर्ग के सदस्य का नाम आता है, और फिर पारित मापदंडों के प्रकार को इसमें जोड़ा जाता है। उदाहरण के लिए, MFileManager.AllInstances.GetFileHashString FileManager.GetFileHash (string fileId) विधि को ओवरराइड करने का गुण है। मुझे लगता है कि यह शैली अतिभारित तरीकों के लिए उत्पन्न सदस्यों की विशिष्टता सुनिश्चित करने की आवश्यकता से जुड़ी है।
मोल के साथ हमें विभिन्न तरीकों से कक्षाओं के किसी भी तरीके और गुणों को बदलने का अवसर मिलता है:
- एक वर्ग के सभी उदाहरणों को बदलना
MFileManager.AllInstances.GetFileHashString = (fileManager, fileId) =>
{
// GetFileHash(string fileId) FileManager
return Guid .NewGuid().ToString();
};
* This source code was highlighted with Source Code Highlighter .
स्थिर वर्ग और स्थिर गुणों को प्रतिस्थापित करना इसी तरह से किया जाता है, केवल AllInstances निर्दिष्ट किए बिना।
- किसी वर्ग का विशिष्ट उदाहरण बदलना
var storageServiceMole = new MStorageService();
storageServiceMole.GetFileHashString = (fileId) =>
{
// GetFileHash(string fileId) storageService StorageService
return testRemoteHash;
};
var storageService = storageServiceMole.Instanc
* This source code was highlighted with Source Code Highlighter .
या तो, इनिशियलाइज्ड क्लास ऑब्जेक्ट के कंस्ट्रक्टर में ट्रांसफर के साथ
var storageService = new StorageService();
var storageServiceMole = new MStorageService(storageService);
storageServiceMole.GetFileHashString = (fileId) =>
{
// GetFileHash(string fileId) storageService StorageService
return testRemoteHash;
};
* This source code was highlighted with Source Code Highlighter .
- कक्षा के सभी उदाहरणों के लिए ऑब्जेक्ट के साथ मोल वर्ग के आवश्यक सदस्यों को ओवरलैप करने के लिए क्लास कंस्ट्रक्टर को बदलना।
MFileUpdater.Constructor = (@ this ) =>
{
var mole = new MFileUpdater(@ this );
mole.ServiceGet = (x) => initializedServiceInstance;
};
* This source code was highlighted with Source Code Highlighter .
- कक्षा के मूल कार्यान्वयन के संदर्भ में आगे के संदर्भ में प्रतिस्थापन। यदि आपको मूल वर्ग विधि को कॉल करने से पहले आने वाले मानों की कुछ जांच करने की आवश्यकता है, तो निम्न विधि का उपयोग करें
var fileUpdaterMole = new MFileUpdater() { InstanceBehavior = MoleBehaviors.Fallthrough };
fileUpdaterMole.UpdateFileFromServiceString = (y) =>
{
fileUpdaterMole.UpdateFileFromServiceString = null ; //
fileUpdaterMole.Instance.UpdateFileFromService(y); // FileUpdater.UpdateFileFromService
};
fileUpdaterMole.Instance.UpdateFileFromService( Guid .NewGuid().ToString());
* This source code was highlighted with Source Code Highlighter .
जाहिर है, लैम्ब्डा एक्सप्रेशन में, आप आने वाले मूल्यों के एस्टर चेक के सभी प्रकार का प्रदर्शन कर सकते हैं या कुछ का अनुकरण कर सकते हैं
पूर्व निर्धारित परिणाम की वापसी के साथ चपलता।
InstanceBehavior
यह वर्ग के सदस्यों के व्यवहार को निर्दिष्ट करने की संभावना को भी ध्यान देने योग्य है, जिनके लिए हम स्पष्ट रूप से एक स्थानापन्न प्रतिनिधि को निर्दिष्ट नहीं करते हैं। प्रत्येक तिल उत्पन्न वर्ग में एक InstanceBehavior संपत्ति होती है, जो निम्न मान ले सकती है
- MoleBehaviors.DefaultValue - वर्ग के अनसुचित सदस्यों को एक खाली प्रतिनिधि द्वारा बदल दिया जाएगा और लौटे परिणाम के प्रकार का डिफ़ॉल्ट मान लौटाएगा
var storageService = new StorageService();
var storageServiceMole = new MStorageService(storageService) { InstanceBehavior = MoleBehaviors.DefaultValue };
// null;
var result = storageService.GetFileHash( Guid .NewGuid().ToString());
* This source code was highlighted with Source Code Highlighter .
- MoleBehaviors.NotImplemented - जब किसी अप्रतिष्ठित सदस्य तक पहुँच हो, तो NotImplementedException को फेंक दिया जाएगा
var storageService = new StorageService();
var storageServiceMole = new MStorageService(storageService) { InstanceBehavior = MoleBehaviors.NotImplemented };
// NotImplementedException
storageService.GetFileHash( "328576BA-7345-4847-84AC-170EF03FFA7A" );
* This source code was highlighted with Source Code Highlighter .
- MoleBehaviors.Fallthrough - अप्रकाशित सदस्यों को कॉल प्रतिस्थापित वर्ग में उनके मूल कार्यान्वयन के अनुसार संसाधित किया जाएगा
var storageService = new StorageService();
var storageServiceMole = new MStorageService() {InstanceBehavior = MoleBehaviors.Fallthrough};
// StorageService.GetFileHash(string fileId)
storageService.GetFileHash( "328576BA-7345-4847-84AC-170EF03FFA7A" );
* This source code was highlighted with Source Code Highlighter .
- MoleBehaviors.Current - मोल वर्ग की एक आवृत्ति के बाद असुरक्षित तरीकों का डिफ़ॉल्ट व्यवहार वर्ग के साथ ओवरलैप होता है। जब एक असुरक्षित सदस्य को बुलाया जाता है, तो एक MoleNotImplementedException को फेंक दिया जाएगा
var storageService = new StorageService();
var storageServiceMole = new MStorageService() {InstanceBehavior = MoleBehaviors.Current};
// MoleNotImplementedException
storageService.GetFileHash( "328576BA-7345-4847-84AC-170EF03FFA7A" );
* This source code was highlighted with Source Code Highlighter .
- MoleBehaviors.CurrentProxy ओवरलैपिंग वर्ग के सभी गैर-अतिव्यापी सदस्यों के लिए वर्तमान व्यवहार छोड़ देता है
var storageService = new StorageService();
var storageServiceMole1 = new MStorageService(storageService) { InstanceBehavior = MoleBehaviors.NotImplemented };
storageServiceMole1.GetFileHashString = (fileId) =>
{
return Guid .NewGuid().ToString();
};
var storageServiceMole2 = new MStorageService(storageService) { InstanceBehavior = MoleBehaviors.CurrentProxy };
storageServiceMole2.DownloadFileString = (fileId) =>
{
return testFileStream;
};
// storageServiceMole1.GetFileHashString
storageService.GetFileHash( "328576BA-7345-4847-84AC-170EF03FFA7A" );
// storageServiceMole2.GetFileHashString
storageService.DownloadFile( "328576BA-7345-4847-84AC-170EF03FFA7A" );
* This source code was highlighted with Source Code Highlighter .
- व्यवहार का कस्टम कार्यान्वयन - यदि आप IMoleBehavior इंटरफ़ेस का अपना कार्यान्वयन बनाते हैं तो संभव है
परीक्षण कार्यान्वयन उदाहरण
यहां स्थिति की वास्तविक परीक्षा होती है जब स्थानीय और दूरस्थ फ़ाइल का हैश अलग होता है।
///
/// ,
///
[TestMethod]
[HostType( "Moles" )]
public void TestUpdateFileNonMatchedHash()
{
var callOrder = 0; //
var testFileId = Guid .NewGuid().ToString();
var testLocalHash = Guid .NewGuid().ToString();
var testRemoteHash = Guid .NewGuid().ToString();
var testFileStream = new FileStream ( @"c:\testfile.txt" , FileMode .OpenOrCreate);
var storageServiceMole = new MStorageService() { InstanceBehavior = MoleBehaviors.Fallthrough };
// GetFileHash StorageService
storageServiceMole.GetFileHashString = (fileId) =>
{
Assert.AreEqual(1, callOrder++); //
Assert.AreEqual(testFileId, fileId);
Assert.AreNotEqual(testLocalHash, testRemoteHash);
return testRemoteHash;
};
storageServiceMole.DownloadFileString = (fileId) =>
{
Assert.AreEqual(2, callOrder++);
Assert.AreEqual(testFileId, fileId);
return testFileStream;
};
// FileManager.
//MFileManager.AllInstances FileManager UpdateFile
// ,
// FileManager
MFileManager.AllInstances.GetFileHashString = (fileManager, fileId) =>
{
Assert.AreEqual(0, callOrder++);
Assert.AreEqual(testFileId, fileId);
return Guid .NewGuid().ToString();
};
MFileManager.AllInstances.SaveFileStringStringFileStream = (fileManager, fileId, fileHash, fileStream) =>
{
Assert.AreEqual(3, callOrder++);
Assert.AreEqual(testFileId, fileId);
Assert.AreEqual(testRemoteHash, fileHash);
Assert.AreSame(testFileStream, fileStream);
};
var fileUpdaterMole = new MFileUpdater
{
InstanceBehavior = MoleBehaviors.Fallthrough,
// getter FileUpdater.Service , moled StorageService
ServiceGet = () => storageServiceMole.Instance
};
var fileUpdater = fileUpdaterMole.Instance;
fileUpdater.UpdateFileFromService(testFileId);
}
* This source code was highlighted with Source Code Highlighter .
दूसरी स्थिति के लिए - जब हैश समान हैं, तो परीक्षण को स्वयं लागू करने का प्रयास करें।
अतिरिक्त जानकारी
- बहु प्रकार के परीक्षणों में तिल के प्रकार का उपयोग नहीं किया जा सकता है।
- कुछ प्रकार के mscorlib को बदलने के लिए मोल्स का उपयोग नहीं किया जा सकता है।
- Microsoft.Moles का उपयोग करने वाले टेस्ट मोल्स द्वारा इंस्ट्रूमेंट किए जाने चाहिए - MSTest के लिए, यह HostType ("Moles") टेस्ट विधि का एक गुण है। अन्य परीक्षण ढाँचों के लिए, moles.runner.exe (nunit के लिए) का उपयोग करके परीक्षण चलाना आवश्यक है, यह moles.runner.exe "yourTestDLLame" /runner: nunit -console.exe के अनुसार दिखेगा। तदनुसार, GUI के माध्यम से परीक्षण रूपरेखा के साथ काम करने वालों को भी दौड़ना होगा। मोल के माध्यम से
- उदाहरणों के परीक्षण के लिए नांट कार्यों का उदाहरण विन्यास जो मोल्स द्वारा लिखी गई हैं
< target name ="runTests" >
< exec basedir ="${build.dir.unittests}" program ="${microsoft.moles.dir}moles.runner.exe" >
< arg value ="/Runner:${nunit.console.dir}nunit-console.exe" ></ arg >
< arg value ="${build.dir.unittests}My.UnitTests.dll" ></ arg >
</ exec >
</ target >
* This source code was highlighted with Source Code Highlighter .
मैं इसे अभी के लिए समाप्त कर दूंगा, अगर यह जानकारी दिलचस्प हो जाए तो एक निरंतरता हो सकती है।
सूत्रों का कहना है
Microsoft मोल्स संदर्भ मैनुअल
NUnit, NAnt और .NET 3.5 के साथ MS मोल्स का उपयोग करना
MSDN - मोल्स फ्रेमवर्क